目前基本使用三款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 環境變量。