配置husky和eslint增加代码编写,提交规范

409 阅读3分钟

ESLint和Prettier

安装

npm install -D eslint prettier eslint-plugin-import eslint-plugin-prettier eslint-config-prettier eslint-config-airbnb-base babel-eslint eslint-plugin-vue
  • eslint-plugin-import,支持ES6语法import/export
  • eslint-config-prettier,关闭不必要或者可能和prettier产生冲突的eslint规则
  • eslint-config-airbnb-base,业界比较成熟的规范

配置eslint规则

在根目录下增加.eslintrc.js文件

module.exports = {
  root: true,
  env: {
    node: true,
    browser: true,
  },
  extends: [
    'airbnb-base',
    'eslint:recommended',
    'plugin:vue/essential',
    'plugin:prettier/recommended',
  ],
  plugins: ['vue', 'prettier'],
  parserOptions: {
    parser: '@babel/eslint-parser',
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    semi: ['off', 'always'], // 不检测语句末尾的分号
    indent: ['error', 2, { SwitchCase: 1 }], // 强制缩进为2个空格
    'space-before-function-paren': 0, // 关闭函数名称跟括号之间的空格检测
    'object-curly-spacing': 0, // 忽略大括号内的空格
    // 允许使用slot和slot-scope
    'vue/no-deprecated-slot-attribute': 0,
    'vue/no-deprecated-slot-scope-attribute': 0,
    // 允许使用过滤器
    'vue/no-deprecated-filter': 0,
    'vue/no-parsing-error': 0,
    // 解决正则斜杠问题
    'no-useless-escape': 0,
    'no-control-regex': 0,
  },
}

配置prettier规则

在根目录下增加.prettierrc.js文件

module.exports = {
  eslintIntegration: true, // 与eslint整合
  semi: false, // 不需要分号结尾
  singleQuote: true, // 单引号
  arrowParens: 'avoid', // 在单个箭头函数参数周围加上括号<avoid|always>
  endOfLine: 'auto', // 最后一行格式自适应
}

参考文章

styleLint

ESLint类型,只不过是对css等样式进行检查的工具

安装

npm install -D stylelint stylelint-config-standard stylelint-prettier

配置文件

在根目录添加stylelint.config.js文件

module.exports = {
  extends: ['stylelint-config-standard', 'stylelint-config-prettier'],
  // https://stylelint.io/user-guide/configuration
  rules: {
    'no-descending-specificity': null, // 禁止低优先级的选择器出现在高优先级的选择器之后
  },
}

参考文章

lint-staged

用于代码提交前的检查,和huskypre-commit钩子配合使用

安装

npm install -D lint-staged

特别需要注意,执行命令的时候安装的是最新的lint-staged,在之后执行中注意node的版本,如果出现Unexpected identifier的错误,就是node版本过低,升级后即可

配置

package.json中增加lint-staged指令块,在提交前使用eslint检查所有js,vue文件

"lint-staged": {
  "*.{js,vue}": [
    "eslint --fix",
    "git add"
  ]
}

husky

安装

npx husky-init && npm install

安装后会在根目录创建.husky文件夹,并在package.json中增加script代码块中增加prepare命令

husky install

特别需要注意,在mac中可能会出现之后设置的钩子不能执行的问题,需要改写prepare命令,具体原因可以参考这篇文章

husky install && chmod ug+x .husky/*

.husky文件夹默认添加pre-commit钩子文件,我们可以配合之前lint-staged命令来改写一下,在提交前对文件进行一次代码规范检查

npx lint-staged --verbose

添加新的钩子

npx husky add .husky/commit-msg 'npx commitlint --config commitlint.config.js --edit $1'

这里添加commit-msg钩子来约束提交规范,如果执行命令失败,可以参考这篇文章

跳过钩子检查

增加--no-verify参数跳过检查,用于增加第三方文件等不需要代码检查的情况

参考文章

commitlint

安装

npm install -D @commitlint/cli @commitlint/config-conventional

配置文件

在根目录下增加commitlint.config.js文件,并配置提交规范

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'build', // 发布版本
        'chore', // 改变构建流程、或者增加依赖库、工具等
        'ci', // 持续集成修改
        'docs', // 文档修改
        'feat', // 新增功能
        'fix', // 修复缺陷
        'perf', // 优化相关,比如提升性能、体验
        'refactor', // 代码重构
        'revert', // 回退版本
        'style', // 样式修改
        'test', // 测试用例修改
      ],
    ],
  },
}

参考文章