前言
ESlint
eslint
是一个按照规则执行代码检查的工具,它可以在编码阶段进行静态分析,给出检查报告。搭配一些插件,可以提前暴露问题,给出提示,并进行修复,大大减少执行过程中的bug。
Prettier
prettier
是一个代码格式化(美化)工具,可以按照设定的规则配置进行代码格式化,统一风格;在团队开发过程中使用相同的规则,可以保证最终代码的一致性,避免代码冲突。
Husky
husky
能够让你更简单的使用git hooks
,可以阻止不合格的commit、push等操作,对git执行的一些命令,通过相应的hooks钩子触发,执行自定义的脚本程序。
配置
安装方式npm yarn pnpm均可,根据项目来。
1、安装eslint和eslint对.vue的支持
-
依赖
npm i eslint eslint-plugin-vue -D
-
介绍
- eslint:eslint插件
- eslint-plugin-vue:官方提供的vue插件,可以检查 .vue文件中的语法错误
-
配置(.eslintrc.cjs)
{ // 使用vue3推荐规则 extends: ["plugin:vue/vue3-recommended"] }
-
忽略文件
-
根目录创建
.eslintignore
文件dist node_modules
-
-
注意
-
在根目录创建eslint配置文件有三种方式:.eslintrc 、.eslintrc.js、.eslintrc.cjs
-
.eslintrc.js
- 在package.json中配置了 type 为 module 时,所有js文件全部使用es模块化,module.exports这种commonjs模块化方式不可以用。
- 解决:1、可以将 .eslintrc.js 改为 .eslintrc.cjs,意思就是使用commonjs模块化;2、type 改为 commonjs
module.exports = { extends: ["plugin:vue/vue3-recommended"] }
-
.eslintrc.cjs
- 开启了eslint之后,该配置文件报错,Delete ‘␍’ eslint(prettier/prettier) ,罪魁祸首是
git
的一个配置属性:core.autocrlf
,由于历史原因,windows
下和linux
下的文本文件的换行符不一致。 - 解决:1、.prettierrc.cjs文件配置
endOfLine: "auto"
,不检测换行符;2、使用.eslintrc
module.exports = { extends: ["plugin:vue/vue3-recommended"] }
- 开启了eslint之后,该配置文件报错,Delete ‘␍’ eslint(prettier/prettier) ,罪魁祸首是
-
.eslintrc
- 需要用json写法
{ "extends": ["plugin:vue/vue3-recommended"] }
-
2、安装prettier和eslint的prettier插件
-
依赖
npm i prettier eslint-plugin-prettier -D
-
介绍
- prettier:prettier插件
- eslint-plugin-prettier:将prettier作为eslint插件
-
配置(.eslintrc.js)
{ // 使用vue3推荐规则,prettier推荐规则,后者替换前者。 extends: [ 'plugin:vue/vue3-recommended', 'plugin:prettier/recommended' ], }
3、解决eslint和prettier冲突的问题
-
痛点
- 例如,eslint说要使用单引号,改为单引号后,prettier又说要使用双引号,出现了冲突。
-
依赖
npm i eslint-config-prettier -D
-
介绍
- eslint-config-prettier:禁用所有与格式相关的eslint规则,也就是说把所有格式相关的校验都交给 prettier 处理
-
配置
-
eslint(.eslintrc.cjs)
module.exports = { root: true, env: { browser: true, node: true, es6: true }, parserOptions: { sourceType: 'module' }, extends: ['plugin:vue/vue3-recommended', 'plugin:prettier/recommended'], plugins: ['prettier'], rules: { 'prettier/prettier': ['error'] } }
-
preitter(.prettierrc.cjs)
module.exports = { printWidth: 120, // 换行字符串阈值 tabWidth: 2, // 水平缩进的空格数 useTabs: false, // 使用tabs semi: false, // 句末是否加分号 vueIndentScriptAndStyle: true, singleQuote: true, // 使用单引号 trailingComma: "none", // 最后一个对象元素加逗号 bracketSpacing: true, // 对象,数组加空格 jsxBracketSameLine: true, // jsx > 是否另起一行 arrowParens: "always", // (x) => {} 是否要有小括号 requirePragma: false, // 不需要写文件开头的 @prettier insertPragma: false, // 不需要自动在文件开头插入 @prettier endOfLine: "auto", // 检测换行符 }
-
4、安装lint-staged
-
依赖
npm i lint-staged -D
-
用途
- 文件过滤器,过滤出需要的文件,执行操作。
- 注意,仅过滤文件,操作由其他插件支持。
-
配置(package.json)
"scripts": { }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": "npm run xxx", "**/*.{js,jsx,tsx,ts,scss,md,json}": [ "xxx" ] }
5、安装husky
-
依赖
npx husky-init install
-
用途
- 执行完后,会在根目录创建一个.husky的文件夹,在commit代码时,会在其之前触发pre-commit钩子,然后进行一些操作(代码检查、代码测试等等)
-
配置
-
pre-commit文件
- 可以自定义指令将
npm test
修改为npm run lint-staged
- 注意:自定义的指令,一定要加 run
- 可以自定义指令将
-
package.json
eslint:src(要验证的目标文件夹)、--fix(修复)、--ext(指定检测文件的后缀)
{ "scripts": { "prepare": "husky install", "lint-fix": "eslint src --fix", "lint-staged": "lint-staged --allow-empty", "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx,.vue" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js", "**/*.{js,jsx,tsx,ts,scss,md,json}": [ "prettier --write" ] } }
-
6、补充eslint对ts的校验
-
依赖
npm i @typescript-eslint/eslint-plugin @typescript-eslint/parser -D
-
配置(.eslintrc.cjs)
module.exports = { root: true, env: { browser: true, node: true, es6: true }, parserOptions: { ecmaVersion: 2022, sourceType: 'module' }, extends: ['plugin:vue/vue3-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'], plugins: ['prettier', '@typescript-eslint'], rules: { 'prettier/prettier': ['error'], '@typescript-eslint/no-inferrable-types': 'off', '@typescript-eslint/no-explicit-any': 'off', 'prefer-const': 'off' } }