本篇介紹的是如何作到在代碼提交前,統一團隊代碼風格,檢查代碼質量,並修復一些低級錯誤。最終期待項目中的開發人員提交的代碼都符合代碼規範、風格統一。javascript
Git Hook + lint-staged + Prettier + ESLint,先介紹最終實現,具體每一個模塊的做用和配置後面有各自的介紹。css
npm i --save-dev husky lint-staged prettier
npm i --save-dev eslint babel-eslint eslint-plugin-react
複製代碼
.eslintrc
{
"env": {
"browser": true,
"es6": true
}
"eslint": "recommended",
"parserOptions": {
"ecmaFeatures": {
"jsx": true,
"impliedStrict": true
}
},
"plugin: react",
"rules": {
"quotes": [
"error",
"single"
]
}
}
複製代碼
.prettier.js
module.exports = {
// 一行最多 100 字符
printWidth: 100,
// 使用 4 個空格縮進
tabWidth: 4,
// 不使用縮進符,而使用空格
useTabs: false,
// 行尾須要有分號
semi: false,
// 使用單引號
singleQuote: true,
// 對象的 key 僅在必要時用引號
quoteProps: 'as-needed',
// jsx 不使用單引號,而使用雙引號
jsxSingleQuote: false,
// 末尾不須要逗號
trailingComma: 'none',
// 大括號內的首尾須要空格
bracketSpacing: true,
// jsx 標籤的反尖括號須要換行
jsxBracketSameLine: false,
// 箭頭函數,只有一個參數的時候,也須要括號
arrowParens: 'always',
// 每一個文件格式化的範圍是文件的所有內容
rangeStart: 0,
rangeEnd: Infinity,
// 不須要寫文件開頭的 @prettier
requirePragma: false,
// 不須要自動在文件開頭插入 @prettier
insertPragma: false,
// 使用默認的折行標準
proseWrap: 'preserve',
// 換行符使用 lf
endOfLine: 'lf'
}
複製代碼
package.json
{
...
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,jsx}": [
"prettier --write",
"eslint --fix",
"git add ."
]
},
...
}
複製代碼
上面的配置只是一種組合方式的舉例,還能夠自由組合爲多種檢查方式,這裏就不一一列舉了。後面是對各個模塊的介紹,感興趣能夠繼續閱讀。html
vscode
編輯器,在擴展中查找 Prettier - Code formatter
插件安裝後便可使用。不一樣編輯器的插件1. CMD + Shift + P -> Format Document
OR
1. Select the text you want to Prettify
2. CMD + Shift + P -> Format Code
複製代碼
[圖片上傳失敗...(image-4acd90-1575447043750)]java
建立規則文件:在根目錄建立 .prettierrc
文件(支持 json 配置格式)或者 建立一個 .prettierrc.js
配置文件node
在 package.json
文件的 scripts
中添加對應的代碼react
{
...
"scripts": {
"format": "prettier --write 'src/**/*.{js,jsx,css,less}'",
...
},
...
}
複製代碼
npm run format
便可自動格式化配置範圍內的全部文件ESLint 是一個代碼檢查工具,它可以被開發者靈活的配置,使其可以知足制定好的代碼規範的要求,而且在編碼過程當中實時檢測輸入的代碼,對於不符合代碼規範的代碼警告或報錯。git
.eslintrc.js
並導出包含您的配置的對象。.eslintrc.yaml
或.eslintrc.yml
定義配置結構。.eslintrc.json
定義配置結構。.eslintrc
,能夠是 JSON 或 YAML。eslintConfig
在你的package.json
文件中建立一個屬性並在那裏定義你的配置。腳本設計運行的環境。每一個環境都帶有一組預約義的全局變量。es6
"env": {
"browser": true,
"node": true
}
複製代碼
腳本在執行期間訪問的其餘全局變量。github
"globals": {
"React": true,
"MtaH5": true,
"TencentGDT": true
}
複製代碼
ESLint容許你指定你想要支持的JavaScript語言選項。默認狀況下,ESLint須要ECMAScript 5語法。您能夠覆蓋該設置,以使用解析器選項啓用對其餘ECMAScript版本以及JSX的支持。npm
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module", // 設置爲`"script"`(默認)或者`"module"`您的代碼位於ECMAScript模塊中。
"ecmaFeatures": { // 一個對象,指示您想要使用哪些其餘語言功能
"jsx": true, // 啓用JSX
"impliedStrict": true // 啓用全局嚴格模式
}
},
複製代碼
要在配置文件中配置插件,請使用
plugins
包含插件名稱列表的密鑰。該eslint-plugin-
前綴能夠從插件名稱被省略。
"plugins": [
"react",
"eslint-plugin-react"
]
複製代碼
擴展就是直接使用別人已經寫好的 lint 規則,
rules
屬性中配置的規則都是基於這個規則之上配置的
"extends": [
"standard"
"eslint:recommended",
"plugin:react/recommended"
],
複製代碼
推薦的擴展配置:
standardjs、airbnb、eslint-config-alloy
ESLint 附帶有大量的規則。你可使用註釋或配置文件修改你項目中要使用的規則。要改變一個規則設置,你必須將規則 ID 設置爲下列值之一
"off"
或 0
: 關閉規則"warn"
或 1
: 開啓規則,使用警告級別的錯誤(不會致使程序退出)"error"
或 2
: 開啓規則,使用錯誤級別的錯誤(當被觸發的時候,程序會退出)"rules": {
"strict": 2,
}
複製代碼
將運行命令添加到 package.json
的 scripts
腳本中,設置對 src 目錄下的文件進行檢查
{
...
"scripts": {
"lint": "eslint ./src"
"lintFix": "eslint ./src --fix"
},
...
}
複製代碼
在控制檯運行以下命令:
// 代碼檢查
npm run lint
// 代碼檢查並修復
npm run lintFix
複製代碼
和其它版本控制系統同樣,Git 能在特定的重要動做發生時觸發自定義腳本。這裏介紹的是提交工做流鉤子
pre-commit
git commit --no-verify
來繞過這個環節prepare-commit-msg
將配置添加到 package.json
中,執行命令添加到 scripts
腳本中:
{
"scripts": {
"lint": "eslint ./ --cache --ignore-pattern .gitignore",
"precommit-msg": "echo 'Pre-commit checks...' && exit 0"
},
"pre-commit": [ "precommit-msg", "lint" ],
"devDependencies": {
"eslint": "^2.12.0",
"pre-commit": "^1.1.3"
}
}
複製代碼
在咱們的 package.json
中配置 husky,而且在對應的 git hook 階段來執行對應的命令。所以,不用繁瑣的去配置 git hook 階段的腳本文件了。
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"pre-push": "npm test"
}
}
}
複製代碼
lint-staged的做用是每次提交只檢查本次提交所修改的文件,其中 staged 是 Git 裏面的概念,指待提交區,使用 git commit -a
,或者先 git add
而後 git commit
的時候,你的修改代碼都會通過待提交區。
// package.json
{
...
"scripts": {
"precommit": "lint-staged", // git commit 執行這個命令,這個命令在調起 lint-staged
},
"lint-staged": { // lint-staged 配置
"src/**/*.{js,jsx}": [
"prettier --write",
"eslint --fix",
"git add"
]
},
...
}
複製代碼
上面整理了一些項目實踐過程當中的方式和方法。方法的使用能夠提升項目的質量。有規範的代碼,必定程度能夠減小問題的發生。代碼的可讀性也有所提升。