Git Hook,又稱爲 git 的鉤子,利用 git hook,咱們一般能夠在 git push,git commit 等 git 命令以前進行一些額外的操做,以免開發人員作一些無用的提交。好比,在 git commit 以前格式化代碼,檢查 lint;又或者,在 git push 以前跑測試等等。
使用 husky 能夠很是方便得進行 git hook 的配置。
好比,在一個 angular 的項目中,咱們進行了以下配置:css
"husky": { "hooks": { "pre-commit": "lint-staged", "pre-push": "npm run test:once" } }
在 git commit 以前,運行 lint-staged 命令。
在 git push 以前,運行測試。html
咱們在每次 git commit 以前,都對代碼中的某些文件進行了修改,咱們可能配置了一些腳本用於規範咱們的代碼,好比跑 lint 的腳本用於語法檢查,或者跑 prettier 的腳本用於代碼格式化。
因爲咱們每次都只是修改了部分文件,因此沒有必要對整個代碼倉庫的文件都進行檢查。此時,使用 lint-staged 就很是方便了,它只會對 git stage 中的文件進行操做。
在上節中,咱們已經在 husky 中配置了 commit 以前運行 lint-staged 命令,那麼相應的 lint-staged 的配置能夠以下:前端
"lint-staged": { "*.{js,ts,scss,html,json}": [ "prettier --write", "git add" ] }
運行 lint-staged,會對 stage 中的文件作 prettier 的代碼格式化,並將修改的文件再次加入 stage。git
接下來咱們會基於 TSLint 作討論。github
一般,咱們但願無論有多少人工做在同一個代碼倉庫中,咱們寫的代碼都有統一的格式和規範,prettier 就是這樣一個工具,能夠幫助咱們作代碼格式化。
perttier 不但支持 ts 文件,也支持對 css、HTML 等文件進行代碼格式化,同時,對三大前端框架的特定的代碼結構都提供了支持,例如 React 中的 styled-components。
因此,咱們可使用 lint 作語法檢查,把格式化的工做都交給 prettier。
當 tslint 和 prettier 一塊兒使用的時候,可能會有格式化的衝突。咱們可使用 tslint-config-prettier 禁止 tslint 中與 prettier 衝突的規則。也可使用 tslint-plugin-prettier 插件讓 tslint 用 prettier 作代碼格式檢查。
因此咱們在 tslint.json 中的配置多是這樣的:npm
{ "extends": ["tslint-plugin-prettier", "tslint-config-prettier"], "rules": { "prettier": true } }
上面的配置須要先安裝開發依賴包 tslint-plugin-prettier 和 tslint-config-prettier。json
首先安裝依賴:npm install husky lint-staged prettier tslint-plugin-prettier --save-dev
在 package.json
中,配置 husky 和 lint-staged:前端框架
"husky": { "hooks": { "pre-commit": "lint-staged", "pre-push": "npm run test:once" } }, "lint-staged": { "src/**/!(*.spec).ts": [ "tslint --project tsconfig.app.json --fix", "prettier --write", "git add" ], "src/**/*.spec.ts": [ "tslint --project tsconfig.spec.json --fix", "prettier --write", "git add" ], "e2e/**/*.ts": [ "tslint --project e2e/tsconfig.json --fix", "prettier --write", "git add" ], "*.{js,scss,html,json}": [ "prettier --write", "git add" ] }
test:once
的腳本。tslint-plugin-prettier
插件,由於若是用 tslint 跑 prettier 沒法使用直接修復的命令。--project
配置 tsconfig 文件時只能配置一個。所以這裏分別配置了功能代碼、測試代碼、e2e 代碼三種文件的配置。在 tslint.json
的 extends
中加上 tslint-plugin-prettier
,最後的配置多是:app
"extends": ["tslint:recommended", "tslint-plugin-prettier"],
你可能還須要配置 .prettierignore
文件用於配置不須要 prettier 的文件,和 .prettierrc
文件用於配置 prettier 的配置。框架