[JS] 使用 ESLint 提高程式碼品質
ESLint
ESLint 是眾多 Javascript Linter 中的其中一個,其他比較常見的還有 JSLint跟 JSHint(名字都好像 XDD),之所以會推薦 ESLint 是因為他可以自由選擇要使用哪些規則,也有很多現成的 plugin 可以使用,另外他對 ES6 還有 JSX 的支援度跟其他 linter 相較之下也是最高的
如何在現有的專案中導入 ESLint
如果你手邊已經有一個專案,那就先全域安裝 ESLint
npm install eslint -g
初始化 ESLint
在專案目錄下跑
eslint --init,這邊你可以選擇直接使用比較熱門的 style guide 或是自訂規則
初始化完畢後目錄下會多一個
.eslintrc.js,裡面就是 ESLint 的設定,以我剛剛自訂的規則來說好了// .eslintrc.js
module.exports = {
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaFeatures": {
"experimentalObjectRestSpread": true,
"jsx": true
},
"sourceType": "module"
},
"plugins": ["react"],
"rules": {
"indent": ["error", 4],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "single"],
"semi": ["error", "never"]
}
};
env
env 是指要在哪些環境執行,譬如說如果你的程式沒有要在瀏覽器執行,那就不應該有 window 或是 document 物件,ESLint 會幫你挑出這些錯誤
extends
extends: "eslint:recommend" 是代表使用推薦的 ESLint 設定,可以點進去看那些打勾的就是,如果不想要其中某些規則(rule)等等自己做更改parseOptions
{
...
"body": [
{
...
"expression": {
"type": "AssignmentExpression",
"start": 0,
"end": 5,
"operator": "=",
"left": { ... },
"right": { ... }
}
}
],
...
}
plugins
因為 react 有些語法長得不太像平常的 javascript,這時候就要用 plugins 讓他對 react 的支援度更高,詳情可以參考 eslint-plugin-react 這個專案,除了 react 之外還有其他很多 plugin 像是 Angular、Mocha、Chai 等等,可以自己選用
rules
如果上面的 extends 或是 plugins 有你不想要的規則,這時候就可以用 rules 把它蓋掉,譬如說這邊設定
quotes: ["error", "single"],那就代表你一定要使用單引號,否則就會跳出 error,如果只想要跳出警告的話可以把它改成 quotes: ["warn", "single"],或是想取消這條規則的話就改成 quotes: ["off", "single"],這是全部的規則,可以根據你的喜好調整開始靜態分析程式碼
設定好之後就可以開始分析你的程式碼,譬如說我的程式碼都放在 src 這個資料夾下面好了,那就在
package.json 內的 scripts 加上 lint 指令"scripts": {
"lint": "eslint src/*.js"
}
接著就跑
npm run lint 分析程式碼,如果有任何錯誤的話他就會跟你說哪個檔案哪一行出錯,像我這裡就是 src/index.js 這個檔案的第一行宣告了一個沒有使用到的變數
如果希望他可以自動修錯誤的話就在 script 裡面加個
--fix,他但有些錯誤(使用 eval、變數沒定義等等)沒辦法自動修的還是要自己修"scripts": {
"lint": "eslint --fix src/*.js"
}
與 git 整合
雖然已經有了
npm run lint 這個 script,但如果是在團隊中一定一定一定會有人忘記 lint 自己的程式碼就 commit 然後 push 上去,這時候就可以使用 pre-commit 這個工具,他會在 git commit 之前先跑某個腳本,如果沒過的話就不允許 commit,所以很適合跟 lint 做搭配
先跑
npm install --save-dev pre-commit 安裝他,安裝完之後在 package.json 加上 "pre-commit": ["lint"] 就完成了,整個檔案會長這樣"name": "...",
"scripts": {
"lint": "eslint src/*.js"
},
"pre-commit": ["lint"],
"dependencies": {
...
}
"devDependenceies": {
"pre-commit": "^1.2.2",
...
}
那以後當任何人在專案下跑
git commit -m "message …" 就會先觸發 ESLint 檢查程式碼,通過之後才會成功 commit總結
這篇跟大家分享我平常是怎麼使用 ESLint 確保我自己的程式碼品質,如果是在團隊中的話 ESLint 也很適用,避免有人寫出很爛的 code 影響整體的效能,如果你最近正在尋找類似的工具的話,不妨用用看 ESLint 吧!


留言
張貼留言