前端代碼風格因人而異,一個項目參與的人多了,不增強控制可能就是一個大雜燴,對開發人員來說就是一個噩夢。html
如何解決這種困境呢?前端
Eslint 代碼檢查,編輯器啓用 Eslint 以後,不符合規範的會自動進行提示。
Prettier 讓代碼變得更 pretty,會更改不符合檢測要求的代碼,自動格式化。
husky git 每步操做的鉤子,沒執行一個操做都會執行一次對應的鉤子函數,執行 pre-commit 操做時,執行 Prettier 格式化腳本,便可自動的格式化代碼,讓 commit 以後的代碼都符合 Prettier規範。
lint-staged 想一想若是你在一個有必定規模的項目裏忽然加入一個格式化工具,是否是整個項目都要變天?lint-staged 就是用來只對變動的文件進行處理的node
npm i -D husky lint-staged prettier eslint-plugin-prettier eslint-config-prettier
複製代碼
項目使用 create-react-app 初始化react
{
"env":{
"amd": true,
"browser": true,
"node": true,
"es6": true
},
"extends": [
"react-app",
"plugin:prettier/recommended",
"prettier/react"
],
"plugins": [
"prettier"
],
"parser": "babel-eslint",
"rules": {
"prettier/prettier": "error"
}
}複製代碼
具體規則參考官網 Optionsgit
{
"semi": false,
"useTabs": false,
"singleQuote": true,
"trailingComma": "es5"
}複製代碼
編輯器識別 .editorconfig 以後能夠在輸入的時候帶來便利,參考 EditorConfiges6
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.md]
trim_trailing_whitespace = false複製代碼
添加 husky 和 lint-staged 配置,添加 lint、fix scripts 項github
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test --env=jsdom",
"eject": "react-scripts eject",
"lint": "eslint src/**/*.js",
"fix": "prettier --write src/**/*.js"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.js": [
"eslint --fix",
"prettier --write",
"git add"
]
},複製代碼
而後運行 npm
npm run lint複製代碼
Eslint 會檢測 src 下面全部 js 文件json
運行
數組
npm run fix複製代碼
Prettier 會自動修復 src 下面的文件,注意,謹慎使用這個操做,它會讓你的全部不合符規則的文件發生變動。你可能會驚訝的發現,文件夾中上百個文件都被改了!!!
如何避免 Prettier 一次將全部的文件格式化?
husky.hooks['pre-commit'] 是在 commit 以前會執行的命令,在執行 git commit 時,會先執行 lint-staged ,而 lint-staged 就是用來只對當前更改的文件進行檢測和格式化。
lint-staged 中 "src/**/*.js" 表示只對 src 中的 js 文件進行格式化,也能夠 "*.js" 表示對全部項目中的 js 文件都會格式化。後面數組中的三條命令會前後分別執行, Eslint fix 以後 Prettier 格式化,而後 git add,而後 git commit
eslint --fix -> prettier --write -> git add -> git commit -m 'xxx'
這是 git commit 以前
執行
git add *
git commit -m 'test'複製代碼
執行後
命令行