目前基本使用三款js代码质量检查工具: jslint, jshint, eslint。许多IDE里面也有对应的检查插件,在每次ctrl + s 保存文件的时候,检查当前文件是否符合规范,保证代码质量。
许多团队都会指定一套代码规范code review,更加严格的检查每次代码修改。 也能够在git commit
以前,检查代码,保证全部提交到版本库中的代码都是符合规范的,
在看vue源码时,难免修改代码,就会触发里面配置好的钩子函数。因而,仔细研究了一下vue配置方法,能够发现配置很是简单。javascript
git 钩子文档上介绍很是详细,git init
后,在.git/hooks
文件中,有一些.simple
结尾的钩子示例脚本,若是想启用对应的钩子函数,只需手动删除后缀。因此,列出两种配置方法:vue
按照文档上,配置钩子脚本,修改hooks中文件名对应的钩子文件,启用钩子。使用shell脚本检查,能够参考vue1.x 里面如何使用java
!/usr/bin/env bash # get files to be linted FILES=$(git diff --cached --name-only | grep -E '^src|^test/unit/specs|^test/e2e') # lint them if any if [[ $FILES ]]; then ./node_modules/.bin/eslint $FILES fi
文件名是pre-commit
,在commit 以前启用的钩子函数, 利用 git diff
查看当前有哪些文件修改过,只对指定文件夹中修改的文件使用eslint进行代码检查,渐进式对整个项目实现代码规范。node
脚本写好后,不用每次都手动复制到.git/hooks
目录下,只需对当前文件建立软链接,到指定目录,在package.json中配置脚本命令,git
"scripts": { "install-hook": "ln -s ../../build/git-hooks/pre-commit .git/hooks/pre-commit", }
在项目初始化后, 执行npm run install-hook
,很方便地配置好了pre-commit 钩子github
在 vue最新的版本中,已经使用尤大改写的youkie, youkie实际是fork husky,而后作了一些定制化的改动, 使得钩子能从package.json的 "gitHooks"属性中读取,shell
{ "gitHooks": { "pre-commit": "foo" } }
使用方法跟husky 相似,能够查看husky 文档,介绍很是详细。npm
npm install husky --save-dev # or npm install yorkie --save-dev
安装完成后,能够发现已经改写了hooks 目录中的文件,只需在package.json 中配置对应钩子要执行的脚本。
husky 配置:json
// package.json { "husky": { "hooks": { "pre-commit": "npm test", "pre-push": "npm test", "...": "..." } } }
回头看看,vue中如何配置bash
// package.json "gitHooks": { "pre-commit": "lint-staged", "commit-msg": "node scripts/verify-commit-msg.js" } "lint-staged": { "*.js": [ "eslint --fix", "git add" ] }
前面提到,利用git diff
,只lint当前改动的文件,lint-staged就很是准确的解决了这一问题,从这个包名,就能够看出,Run linters on git staged files
,只针对改动的文件进行处理。
结合husky一块儿使用,安装依赖:
npm install --save-dev lint-staged husky
修改package.json 文件
{ + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.js": ["eslint --fix", "git add"] + } }
使用了eslint,须要配置.eslintrc, lint-staged还有一个好处,能够在lint后,更加灵活,执行其余脚本,尝试进行修改错误,好比 eslint --fix
检查后并修复错误。
上面列出的vue 文件使用了相似的配置,另外增长了 commit-msg 钩子,对提交说明进行检查,在 scripts/verify-commit-msg.js文件中能够找到检查脚本,
const chalk = require('chalk') const msgPath = process.env.GIT_PARAMS const msg = require('fs').readFileSync(msgPath, 'utf-8').trim() const commitRE = /^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/ if (!commitRE.test(msg)) { console.log() console.error( ` ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` + chalk.red(` Proper commit message format is required for automated changelog generation. Examples:\n\n`) + ` ${chalk.green(`feat(compiler): add 'comments' option`)}\n` + ` ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` + chalk.red(` See .github/COMMIT_CONVENTION.md for more details.\n`) + chalk.red(` You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`) ) process.exit(1) }
利用process.env.GIT_PARAMS 找到目录,读取msg 说明,进行检查。
使用 husky 要注意,对应属性名已经改成HUSKY_GIT_PARAMS , 而不是原始的 GIT_PARAMS 环境变量。