前言

前端代码规范的检查如果依靠人工的话太过耗时,也不太现实,所以我们制定ESlint+Prettier规则来约束前端代码。
ESlint负责语言层面的规范,Prettier负责样式相关。

ESlint

ESLint 是一个开源的 JavaScript 代码检查工具,由 Nicholas C. Zakas 于2013年6月创建。代码检查是一种静态的分析,常用于寻找有问题的模式或者代码,并且不依赖于具体的编码风格。对大多数编程语言来说都会有代码检查,一般来说编译程序会内置检查工具。
JavaScript 是一个动态的弱类型语言,在开发中比较容易出错。因为没有编译程序,为了寻找 JavaScript 代码错误通常需要在执行过程中不断调试。像 ESLint 这样的可以让程序员在编码的过程中发现问题而不是在执行的过程中。
ESLint 的初衷是为了让程序员可以创建自己的检测规则。ESLint 的所有规则都被设计成可插入的。ESLint 的默认规则与其他的插件并没有什么区别,规则本身和测试可以依赖于同样的模式。为了便于人们使用,ESLint 内置了一些规则,当然,你可以在使用过程中自定义规则。
ESLint 使用 Node.js 编写,这样既可以有一个快速的运行环境的同时也便于安装。

Prettier

Prettier是一个支持多种语言的代码格式化工具(Opinionated code formatter),根据自己的规则重新解析打印AST,使得整个代码库保持一致的代码样式(并不会影响AST),这些规则将最大行长考虑在内,并在必要时包装代码。

配置

eslint-config-alloy

我们使用的是腾讯 AlloyTeam 创立的一套 ESLint 规则eslint-config-alloy

设计理念

  • 样式相关的规则交给 Prettier 管理
  • 传承 ESLint 的理念,帮助大家建立自己的规则
  • 高度的自动化:先进的规则管理,测试即文档即网站
  • 与时俱进,第一时间跟进最新的规则

    开始配置

  1. 安装相关依赖。

    1. npm install --save-dev eslint@7.17.0 babel-eslint@10.1.0 vue-eslint-parser@7.3.0 eslint-config-alloy@3 eslint-config-prettier@7.1.0 eslint-plugin-prettier@3.3.1 eslint-plugin-vue@7.4.1 vue-eslint-parser@7.3.0
  2. 依赖版本

    1. "eslint": "7.17.0",
    2. "babel-eslint": "10.1.0",
    3. "eslint-config-alloy": "^3.10.0",
    4. "eslint-config-prettier": "^7.1.0",
    5. "eslint-plugin-prettier": "^3.3.1",
    6. "eslint-plugin-vue": "7.4.1",
    7. "vue-eslint-parser": "^7.3.0",
  3. 根目录下新建.eslintrc.js文件

添加如下配置

  1. module.exports = {
  2. //此项是用来告诉eslint找当前配置文件不能往父级查找
  3. root: true,
  4. parserOptions: {
  5. //此项是用来指定eslint解析器的,解析器必须符合规则,babel-eslint解析器是对babel解析器的包装使其与ESLint解析
  6. parser: 'babel-eslint',
  7. },
  8. //此项指定环境的全局变量,下面的配置指定为浏览器环境,启用除了 modules 以外的所有 ECMAScript 6 特性
  9. env: {
  10. browser: true,
  11. es6: true,
  12. },
  13. // 此项是用来提供插件的,插件名称省略了eslint-plugin-,下面这个配置是用来规范vue
  14. plugins: ['vue'],
  15. extends: [
  16. // https://github.com/AlloyTeam/eslint-config-alloy
  17. 'alloy/vue',
  18. // https://github.com/vuejs/eslint-plugin-vue
  19. 'plugin:vue/essential',
  20. // 结合.prettierrc.js中的规则来检查代码!
  21. 'plugin:prettier/recommended',
  22. ],
  23. globals: {
  24. // 你的全局变量(设置为 false 表示它不允许被重新赋值)
  25. //
  26. // myGlobal: false
  27. },
  28. rules: {
  29. // 自定义你的规则
  30. // prettier找出代码中的格式问题
  31. 'prettier/prettier': 'error',
  32. // complexity:'40',
  33. complexity: ['error', 40],
  34. 'vue/component-tags-order': [
  35. 'error',
  36. {
  37. order: [['template', 'script'], 'style'],
  38. },
  39. ],
  40. /**
  41. * 禁止出现重复的属性
  42. */
  43. 'vue/no-duplicate-attributes': [
  44. 'error',
  45. {
  46. allowCoexistClass: true,
  47. allowCoexistStyle: true,
  48. },
  49. ],
  50. },
  51. };
  1. 根目录下新建.prettierrc.js文件

添加如下配置

  1. // .prettierrc.js
  2. module.exports = {
  3. // 一行最多 120 字符
  4. printWidth: 120,
  5. // 使用 2 个空格缩进
  6. tabWidth: 2,
  7. // 不使用缩进符,而使用空格
  8. useTabs: false,
  9. // 行尾需要有分号
  10. semi: true,
  11. // 使用单引号
  12. singleQuote: true,
  13. // 对象的 key 仅在必要时用引号
  14. quoteProps: 'as-needed',
  15. // jsx 不使用单引号,而使用双引号
  16. jsxSingleQuote: false,
  17. // 末尾需要有逗号
  18. trailingComma: 'all',
  19. // 大括号内的首尾需要空格
  20. bracketSpacing: true,
  21. // jsx 标签的反尖括号需要换行
  22. jsxBracketSameLine: false,
  23. // 箭头函数,只有一个参数的时候,也需要括号
  24. arrowParens: 'always',
  25. // 每个文件格式化的范围是文件的全部内容
  26. rangeStart: 0,
  27. rangeEnd: Infinity,
  28. // 不需要写文件开头的 @prettier
  29. requirePragma: false,
  30. // 不需要自动在文件开头插入 @prettier
  31. insertPragma: false,
  32. // 使用默认的折行标准
  33. proseWrap: 'preserve',
  34. // 根据显示样式决定 html 要不要折行
  35. htmlWhitespaceSensitivity: 'css',
  36. // vue 文件中的 script style 内不用缩进
  37. vueIndentScriptAndStyle: false,
  38. // 换行符使用 lf
  39. endOfLine: 'lf',
  40. // 格式化嵌入的内容
  41. embeddedLanguageFormatting: 'auto',
  42. };

开发工具适配

  • VS code

安装ESlint,Prettier插件。
image.png
image.png
如果不能识别vue文件,需要在「文件 => 首选项 => 设置」里做如下配置:

  1. {
  2. "eslint.validate": [
  3. "javascript",
  4. "vue",
  5. "typescript"
  6. ]
  7. }
  1. 保存自动修复功能大家根据自身情况设置。

结语

一套规范的建立与实施离不开大家的共同努力,一开始可能会经历阵痛,但相信遵守规范能让我们获益无穷。

附录

详细规则见:https://github.com/AlloyTeam/eslint-config-alloy/blob/master/vue.js