提交代码前进行代码格式检查,可以在提交代码前检查代码格式,以及编码错误,提升代码质量。
要实现代码提交前的检查,可以考虑到git 提供的钩子函数 pre-commit,即在git commit 执行前的钩子函数,在pre-commit 中对代码进行检查并修改。
goole 一下发现,原来还存在 husky 这个插件可以帮助实现代码检查及修改。
pre-commit
pre-commit能够防止不规范代码被commit 首先安装 pre-commit
npm install pre-commit --save-dev
编辑 package.json 文件
"scripts": {
"test": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1",
"lint": "lint-staged",
},
"pre-commit": [
"lint",
]
通过执行 check 脚本,来实现对代码的检查修改。
husky
husky 也可以用来防止代码不规范提交的插件,但是相比 pre-commit 提供了更加强大的功能,husky 可以执行 pre-commit pre-push 等生命周期。husky 姑且可以认为是 git 钩子函数的一个代理集合。 安装 husky
在安装 husky 的时候,husky会根据 package.json里的配置,在.git/hooks 目录生成所有的 hook 脚本(如果你已经自定义了一个hook脚本,husky不会覆盖它)
npm install husky --save-dev
编辑 package.json
"scripts": {
"test": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1",
},
"husky": {
// 在 hooks 中可以声明其他 git 钩子函数的操作,
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "echo $HUSKY_GIT_PARAMS"
}
}
通过以上,无论是pre-commit 还是 husky ,我们都已经声明了在 pre-commit 这个钩子,但是在钩子中具体操作是 lint-staged ,那 lint-staged 又是什么?
lint-staged
staged 是 git 的暂存区概念,lint-staged 的目的在于,将代码从暂存区(stage)提交到分支时执行。 安装 lint-staged
npm install lint-staged --save-dev
修改 package.json
"src/**": [ // 指定文件,而不是全局扫描
"eslint --fix --ext .js", // 执行eslint --fix操作,进行扫描,若发现工具可修复的问题进行fix
"prettier --write", // 执行prettier脚本,这是对代码进行格式化的,在下面具体来说
"git add" // 上述两项任务完成后对代码重新add
]
可以看到,先执行 eslint 对代码扫描并修改,然后执行 prettier 脚本来对代码格式化。
eslint
安装 eslint
npm install eslint --save-dev
eslint 初始化项目
npx eslint --init 会在文件中生成 .eslintrc.js 文件
在此文件 rule 中配置相关的检查规则
"rules":{
// 禁止对象字面量中出现重复的 key
"no-dupe-keys": "error",
// 禁止出现重复的 case 标签
"no-duplicate-case": "error",
// 禁止出现空语句块,允许catch出现空语句
"no-empty": ["error", {"allowEmptyCatch": true}],
// 禁止对 catch 子句的参数重新赋值
"no-ex-assign":"error",
// 禁止不必要的布尔转换
"no-extra-boolean-cast": "error",
// 禁止不必要的分号
"no-extra-semi": "error",
// 强制所有控制语句使用一致的括号风格
"curly": "error"
}
prettier
prettier 是一个格式化代码工具 安装 prettier
npm install prettier --save-dev
在根目录下新建 .prettierrc 文件
{
// 代码换行长度
"printWidth": 200,
// 代码缩进空格数
"tabWidth": 2,
// 使用制表符缩进而不是空格缩进
"useTabs": true,
// 代码结尾是否加分号
"semi": false,
// 是否使用单引号
"singleQuote": true,
// 对象大括号内两边是否加空格 { a:0 }
"bracketSpacing": true,
// 单个参数的箭头函数不加括号 x => x
"arrowParens": "avoid"
}
注意在使用时需要删除注释
总结
到此我们就构建了一个具备语法检查,并可以自动格式化代码的项目。
// 依次执行,就可以看到相应的检查代码,并格式化代码效果
git add .
git commit -m "test"