规范:前端代码开发规范

简介: 规范:前端代码开发规范

一、前端静态代码检查工具

1.1、ESLint:ESLint 是一个插件化的 JavaScript 代码检查工具,可以使用规则插件或者自定义规则对代码进行静态检查。

1.2、JSLint:JSLint 是由 Douglas Crockford 开发的一个非常受欢迎的 JavaScript 代码检查工具,可以帮助开发者检查代码的潜在问题。

1.3、JSHint:JSHint 是 JSLint 的一个分支,它支持更加灵活的配置选项,并提供了更加友好的错误提示信息。

1.4、TSLint:是一个TypeScript代码质量工具,与ESLint类似,支持自定义规则和插件。

1.5、Prettier:是一个代码格式化工具,支持多种语言和编辑器,可以自动格式化代码,使代码风格统一。

1.6、Stylelint: Stylelint 是一个专门用于 CSS 的静态检查工具,可以检查 CSS 代码是否符合一定的规范和风格。

1.7、TypeScript:TypeScript 是一个开源的编程语言,可以用于开发大型和复杂的 JavaScript 应用程序。它提供了类型检查、静态分析和代码提示等功能,可以帮助开发者编写更加健壮和可维护的代码。

以上工具都可以帮助检查代码质量,提高代码可维护性和可读性,建议根据项目需求选择合适的工具使用。

二、以下是一些常见的前端代码审查规范

2.1、代码格式:代码应该按照一定的格式排版,以提高可读性和可维护性。例如,使用空格来对齐代码,使用缩进来表示代码块等等。

2.2、变量命名:变量、函数名、常量等应该有意义,清晰易懂,并且与其所代表的实际意义相符。

2.3、注释规范:代码中应该适当添加注释,注释应该清晰明了,涵盖代码的关键信息,同时不应该过多或者太少。

2.4、测试与错误处理:代码应该有足够的错误处理机制,同时也要配备相应的测试用例来确保代码质量。

2.5、性能优化:代码应该被优化以最小化资源的使用和加载时间。例如避免冗余代码、缩小文件大小、提高加载时的并行度等等。

以上只是一些常见的前端代码审查规范,您也可以参考各种前端框架、语言、设计模式等相关文档,在您的项目中制定与其匹配的审查规范。

三、JavaScript变量的命名规则如下

3.1、变量名称必须以字母、下划线(_)或美元符号($)开头。

3.2、变量名称可以包含字母、数字、下划线或美元符号。

3.3、变量名称不应该使用JavaScript保留字,比如if、else、for、function等。

3.4、变量名称应该使用有意义的名称,让代码易于理解和维护。

3.5、变量名称应该使用小驼峰式命名,即第一个单词小写,后面的单词首字母大写(例如:firstName)。

let userName;
let num1;
let totalAmount;
let _privateValue;
let $globalVar;

四、JavaScript避免变量名称冗余

4.1. 使用有意义的变量名:使用有意义的变量名可以避免变量名称冗余。

例如:

使用 "userName" 而不是 "name" 来存储用户名称。

使用const user = { name: "snow" } ,不使用 const user = { userName: "snow" },当使用这个对象时直接是user.name而不是user.userName。

4.2、避免全局变量:使用全局变量可能会导致变量名称冲突和冗余。可以在代码中避免使用全局变量,而是将变量限制在函数或模块中。

4.3、使用作用域:在 JavaScript 中,每个函数都有自己的作用域。可以使用作用域来避免变量名称冗余。例如,在函数中声明的变量只能在该函数中访问,这样可以避免变量名称冲突和冗余。

4.4、使用 const 和 let:使用 const 和 let 可以避免变量名称冗余。const 和 let 限制了变量的作用域,并提供了更好的代码安全性和可维护性。

4.5、使用命名规范:在代码中使用命名规范可以避免变量名称冗余。例如,可以使用驼峰命名法或下划线命名法等。

通过以上几种方法可以有效地避免 JavaScript 中的变量名称冗余和冲突,提高代码质量和可维护性。

五、CSS 命名规范BEM

BEM 是一种常用的 CSS 命名规范,它的全称是块(Block)、元素(Element)和修饰符(Modifier)。

5.1、块(Block):块是一个独立的、可重用的组件,它包含了一个或多个元素。块的类名建议使用单个字母或单词,多个词之间用连字符(-)连接,例如:.menu、.list。

5.2、元素(Element):元素是块的组成部分,它只能属于块,不能单独使用。元素的类名应该由块的类名和单个字母、单个单词或单词组成,多个词之间也用连字符(-)连接,例如:.menu__item、.list__item。

5.3、修饰符(Modifier):修饰符用于增强块或元素的特性,也可以用于表示状态、主题等。修饰符的类名应该由块或元素的类名和单个单词或单词组成,用连字符(-)连接,例如:.menu__item--active、.list__item--disabled。

使用 BEM 命名规范可以让 CSS 代码更加可读和易于维护。同时,它也可以减少不必要的样式冲突和提高组件的重用性。

六、除了 BEM 命名规范外,还有以下一些常见的 CSS 命名规范

6.1、OOCSS(Object-Oriented CSS):这是一种面向对象的 CSS 设计方法,它将 UI 模块视为独立的对象,并将样式分解为结构和皮肤两部分。结构样式通常定义在类名中,而皮肤样式则定义在后缀类名中,例如:.button、.button-red。

6.2、SMACSS(Scalable and Modular Architecture for CSS):这是一种可扩展和模块化的 CSS 架构,它将样式表分解为基础、布局、模块、状态和主题等五个层次。每个层次都有相应的命名规范和组织方式。

6.3、ACSS(Atomic CSS):这是一种基于原子类的 CSS 设计方法,它将样式定义为单个属性和值对,每个属性和值对都对应一个原子类。这种方法可以大大减少样式的重复和冗余,并提高样式表的可维护性。

6.4、CSS Modules:这是一种将 CSS 模块化和组件化的方法,它将样式表视为独立的模块,每个模块都有自己的命名空间和局部作用域,以防止样式冲突和提高组件的重用性。

不同的命名规范适用于不同的项目和团队,选择一个适合自己的命名规范可以提高 CSS 代码的可维护性和重用性。

七、JavaScript命名语义化的建议

在 JavaScript 中,命名语义化通常是指变量名、函数名、类名等符号名称清晰、易于理解、表达含义和用途的编码方法。以下是一些命名语义化的建议:

7.1. 变量名:变量名应该能够准确描述变量所存储的内容,应该避免使用缩写或者简写,除非该缩写或者简写是广泛接受的。例如,使用 `fruit` 来表示水果,使用 `price` 来表示价格,不应该使用 usrNm 来代表用户名,而应该使用 userName

7.2. 函数名:函数名应该准确描述函数的用途和功能,小写字母开头的驼峰命名法,使用动词加名词的形式更易于理解。例如,使用 `calculateTotal` 来计算总金额,使用 `displayMessage` 来显示信息,getUserName获取用户名,validateEmail验证电子邮件地址等。

7.3. 类名:类名应该准确描述类的用途和功能。例如,使用 `Person` 来表示人类,使用 `Car` 来表示车辆等。

7.4. 常量名:常量名应该使用大写字母和下划线组成,并描述常量的用途和含义。例如,使用 `MAX_WIDTH` 来表示最大宽度,使用 `PI` 来表示圆周率等。

7.5. 枚举值:枚举值应该使用大写字母、下划线组成,并描述枚举值的用途和含义。例如,使用 `COLOR_RED` 来表示红色,使用 `SIZE_LARGE` 来表示大号等。

7.6. 布尔值:如果一个变量只有两种取值,即 true 和 false,则命名时应该使用形容词或动词的过去分词表示含义。例如,使用 `isVisible` 来表示是否可见,使用 `isDone` 来表示是否完成等。

7.7. 回调函数名:回调函数名应该准确描述回调函数的作用和用途。例如,使用 `onSuccess` 来表示当操作成功时执行的回调函数,使用 `onError` 来表示当操作失败时执行的回调函数等。

7.8、类名应该采用大写字母开头的驼峰命名法,能够描述类所代表的含义。例如,代表用户的类应该命名为 User,代表商品的类应该命名为 Product

通过命名语义化,可以使代码更易于理解和维护,提高代码的可读性和可维护性。

八、js将对象的属性值保存为局部变量

const person = {
  name: 'John',
  age: 30,
  gender: 'male'
};
//推荐
const { name, age, gender } = person;
console.log(name, age, gender);
//不推荐
console.log(person.name, person.age, person.gender);

九、最小函数准则

最小函数准则(Single Responsibility Principle,SRP)是指在编写函数时,应保证函数的职责单一,即每个函数应该只做一件事情。这样可以使函数更加清晰、可读性更好、易于维护和测试。SRP 是面向对象编程的基础原则之一。

遵循 SRP,可以有以下好处:

1. 提高代码的可读性和可维护性:每个函数只负责一个职责,代码逻辑更加清晰,便于理解和修改。

2. 提高代码的可测试性:每个函数只有一个职责,可以编写更加精确的测试用例,使代码更加健壮和稳定。

3. 提高代码的复用性:职责单一的函数可以在不同的场景下重复利用,避免了功能的冗余和代码重复的出现。

4. 更好的模块化和封装:可以将职责相近的函数组合成一个模块或者类,提高代码的可复用性和可维护性。

在实际编程中,遵循 SRP 的方法有很多,例如:

1. 每个函数只处理一个参数,而不是多个参数。

2. 每个函数只返回一个值或者只对一个值进行修改。

3. 将一个函数拆分成多个函数,每个函数只负责一个特定的职责。

4. 将一个函数拆分成多个步骤,每个步骤只负责一个职责,然后将这些步骤组合成一个函数。

十、推荐使用函数式编程

下面是一个简单的 JavaScript 函数式编程示例,该函数接受另一个函数作为参数,然后将这个函数应用到数组的每一个元素中,并返回结果数组:

function mapArray(array, f) {
  var result = [];
  for (var i = 0; i < array.length; i++) {
    result.push(f(array[i]));
  }
  return result;
}
// 定义一个函数,计算一个数的平方
function square(x) {
  return x * x;
}
var numbers = [1, 2, 3, 4, 5];
// 使用函数式编程,将 square 函数应用到 numbers 数组的每个元素中
var squares = mapArray(numbers, square);
console.log(squares); // [1, 4, 9, 16, 25]

在这个例子中,我们定义了一个函数 mapArray(),它接受一个数组和一个函数作为参数,然后将这个函数应用到数组的每个元素上,将结果存储在一个新数组中,并返回这个新数组。我们还定义了一个函数 square(),它计算一个数的平方。然后我们使用 mapArray() 函数和 square() 函数将 numbers 数组中每个元素的平方存储在 squares 数组中,并使用 console.log() 函数将 squares 数组输出到控制台。

十一、vue项目开发规范

11.1、代码风格

在 Vue 项目中使用 eslint 保证代码风格统一,具体设置可以参考 eslint-config-vue官方文档

11.2、目录结构

Vue 项目的目录结构应该是清晰的,方便代码组织和维护。

11.2.1、基本目录结构

|-- dist                               // 打包后的文件目录
|-- public                             // 公共静态资源文件,如index.html
|   |-- index.html
|-- src                                // 源码目录
|   |-- api                            // 接口请求相关文件
|   |   |-- index.js                   // 请求封装入口文件
|   |   |-- api.js                     // 接口具体实现文件
|   |   |-- ...                        // 其他接口实现文件
|   |-- assets                         // 图片,字体等静态资源文件
|   |-- components                     // 公共组件目录
|   |-- mixins                         // 公共 mixins
|   |-- router                         // 路由文件
|   |-- store                          // Vuex 状态管理文件
|   |-- utils                          // 公共工具函数
|   |-- views                          // 页面组件目录
|   |-- App.vue                        // 根组件
|   |-- main.js                        // 入口文件
|-- .gitignore                         // git 忽略文件
|-- babel.config.js                    // babel 配置文件
|-- package.json                       // 依赖配置文件
|-- README.md                          // 项目说明文件
|-- vue.config.js                      // Vue 配置文件

11.2.2、组件目录结构

|-- components
|   |-- Login
|   |   |-- index.js                   // 组件入口文件
|   |   |-- Login.vue                  // 组件代码文件
|   |   |-- Login.scss                 // 组件样式文件
|   |   |-- Login.spec.js              // 组件测试文件
|   |   |-- Login.story.js             // 组件故事文件

11.3、组件命名

Vue 组件的命名应该是有意义的,方便他人理解和使用代码。

命名规则:

  • 单词全部小写
  • 多个单词之间使用连字符(-)连接
  • 建议使用功能相似的组件使用同一个前缀,如 v-button, v-button-group

vue 组件名称中避免缩写,比如使用 button,而不是 btn

11.4、组件结构

Vue 组件的结构应该是清晰的,方便复用和维护。

vue 组件的代码结构建议如下:

<template>
  <div class="container">
    <!-- 组件主体内容 -->
  </div>
</template>
<script>
  export default {
    name: 'ComponentName', // vue 组件名称
    props: { // vue 组件属性
      propA: {
        type: String,
        default: 'A'
      },
      propB: {
        type: Number,
        default: 0
      }
    },
    data () {
      return {} // vue 组件数据
    },
    computed: { // vue 计算属性
      computedA () {
        // ...
      }
    },
    watch: { // vue 监听器
      'watchA' (val, oldVal) {
        // ...
      }
    },
    methods: { // vue 组件方法
      methodA () {
        // ...
      }
    },
    // vue 生命周期
    beforeCreate () {},
    created () {},
    beforeMount () {},
    mounted () {},
    beforeUpdate () {},
    updated () {},
    beforeDestroy () {},
    destroyed () {}
  }
</script>
<style lang="scss" scoped>
  .container {
    /* 样式代码 */
  }
</style>

11.5、代码注释

代码注释对于可维护性和可读性非常重要,建议在代码中做好注释,方便他人理解和修改代码。

注释规则:

  • 注释之间留有空行,区分不同部分
  • 注释内容简洁明了,不宜过长
  • 将注释内容放置在被注释代码上方,而非右侧
  • 如果可以通过规范的命名来理解可不写注释

11.6、其他

  • 组件样式统一使用 SCSS 编写
  • 禁止使用 v-ifv-for 结合使用,因为这样会影响性能,建议使用计算属性的方式处理
  • 变量名、函数名、文件名等命名要有意义,不要使用单个字符的命名方式,如 a, b
  • 使用 Vuex 状态管理时,建议单个文件不要超过 400 行代码

十二、本文借助AI创作,欢迎交流指正,关注我,一起学习

相关文章
|
21天前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
3天前
|
前端开发 JavaScript
前端界的革命:掌握这些新技术,让你的代码简洁到让人惊叹!
前端技术的快速发展带来了许多令人惊叹的新特性。ES6及其后续版本引入了箭头函数、模板字符串等简洁语法,极大减少了代码冗余。React通过虚拟DOM和组件化思想,提高了代码的可维护性和效率。Webpack等构建工具通过模块化和代码分割,优化了应用性能和加载速度。这些新技术正引领前端开发的革命,使代码更加简洁、高效、可维护。
9 2
|
3天前
|
前端开发 JavaScript 测试技术
前端工程师的必修课:如何写出优雅、可维护的代码?
前端工程作为数字世界的门面,编写优雅、可维护的代码至关重要。本文从命名规范、模块化设计、注释与文档、遵循最佳实践四个方面,提供了提升代码质量的方法。通过清晰的命名、合理的模块划分、详细的注释和持续的学习,前端工程师可以写出高效且易于维护的代码,为项目的成功打下坚实基础。
10 2
|
9天前
|
监控 前端开发 JavaScript
前端开发的终极奥义:如何让你的代码既快又美,还不易出错?
【10月更文挑战第31天】前端开发是一个充满挑战与机遇的领域,本文从性能优化、代码美化和错误处理三个方面,探讨了如何提升代码的效率、可读性和健壮性。通过减少DOM操作、懒加载、使用Web Workers等方法提升性能;遵循命名规范、保持一致的缩进与空行、添加注释与文档,让代码更易读;通过输入验证、try-catch捕获异常、日志与监控,增强代码的健壮性。追求代码的“快、美、稳”,是每个前端开发者的目标。
23 3
|
10天前
|
前端开发 JavaScript 开发者
前端开发的终极技巧:如何让你的代码既简洁又高效,还能减少bug?
【10月更文挑战第30天】前端开发充满挑战与创新,如何编写简洁高效且少bug的代码是开发者关注的重点。本文介绍五大技巧:1. 模块化,提高代码复用性;2. 组件化,降低代码耦合度;3. 使用现代框架,提高开发效率;4. 统一代码规范,降低沟通成本;5. 利用工具,优化代码质量。掌握这些技巧,让前端开发更高效。
22 1
|
17天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
23 1
|
1月前
|
前端开发 测试技术
如何从零到一建立前端规范
【10月更文挑战第6天】
52 2
|
28天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
118 2
|
28天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
36 0
|
28天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。