在編寫 Js 代碼時, 下面是兩種常見的編程風格node
const foo = 'Foo'
複製代碼
const foo = "Foo";
複製代碼
關於使用單引號仍是雙引號、 行末加不加 ;
可使用 ESlint 在開發時統一編程風格。react
ESlint
工具不只能夠統一這種風格, 還能夠在編寫時就檢查代碼是否符合語法規範。git
npm install eslint -g ## 爲了使用 eslint cli 功能, 這裏使用了全局安裝
複製代碼
.eslintrc
文件{
"rules": {
"indent": 2,
"no-unused-vars": 2,
"no-alert": 2
},
"env": {
"browser": true
}
}
複製代碼
index.js
文件var unused = 'I have no purpose!'
alert(unused)
function foo () {
var message = 'Hello, World!';
alert(message);
}
foo()
複製代碼
eslint index.js
檢查代碼。在命令行中輸出了三條錯誤, 並顯示了錯誤出現的 行:列
錯誤等級
錯誤說明
對應的 eslint rule
es6
7:1 error Expected indentation of 4 spaces but found 8 indent
複製代碼
--fix
參數, 修復問題。eslint index.js --fix
複製代碼
--fix
該選項指示 ESLint 試圖修復儘量多的問題。修復只針對實際文件自己,並且剩下的未修復的問題纔會輸出。不是全部的問題都能使用這個選項進行修復。github
使用 eslintrc.js
、 eslintrc.json
、 eslintrc.yml
、 .eslintrc
文件配置。npm
除了使用配置文件, 也能夠在文件內部以行內的形式來配置 eslint
規則。編程
// index.js
var unused = 'I have no purpose!'
// eslint-disable-next-line no-alert
alert(unused)
function foo () {
var message = 'Hello, World!';
// eslint-disable-next-line indent
console.log(message);
}
foo()
複製代碼
package.json
中使用 eslintConfig
字段進行配置{
"eslintConfig": {
"rules": {
...
},
"extends": []
}
}
複製代碼
當在代碼中使用 const
let
等 ES6
語法時, ESlint
會報錯。json
這是由於 ESlint
默認支持 JavaScript
三、5 版本。 對更高 ES
語法的支持須要手動配置。數組
ESlint
的解析器選項能夠在配置文件中使用 parserOptions
屬性設置。可用的選項有:bash
ecmaVersion
默認設置爲3,5(默認), 可使用 六、七、8 或 9 來指定你想要使用的 ECMAScript 版本。你也能夠用使用年份命名的版本號指定爲 2015(同 6),2016(同 7),或 2017(同 8)或 2018(同 9)
sourceType
設置爲 "script" (默認) 或 "module"(若是你的代碼是 ECMAScript 模塊)。
ecmaFeatures
這是個對象,表示你想使用的額外的語言特性:
globalReturn
容許在全局做用域下使用 return 語句impliedStrict
啓用全局 strict modejsx
啓用 JSXexperimentalObjectRestSpread
啓用實驗性的 object rest/spread properties 支持{
"paarserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
}
}
複製代碼
::: tip
{ "parserOptions": { "ecmaVersion": 6 } }
來開啓 ES6
語法支持, 還須要 {"env": {"es6": true}}
(當開啓了這個配置後會自動開啓對 ES6
語法的支持) :::一個環境定義了一組預約義的全局變量。 Js
運行在不一樣的環境, 會有不一樣的全局變量, 例如在 Node
環境中會存在 global
變量, 當運行在 browser
中會存在 window
變量。 ESlint
會根據當前的運行環境來識別代碼中的全局變量, 若是執行環境與全局變量不符合時, 將會報錯。
使用 env 關鍵字在配置文件裏指定想啓用的環境,並設置它們爲 true。
{
"env": {
"browser": true,
"node": true
}
}
複製代碼
更多的
env
配置參照 Specifying Environments
當訪問源文件未定義的變量名時, no-undef
將會發出警告。 這是能夠在 ESlint
配置文件中使用 globals
單獨設置一個全局變量。
{
"globals": {
"var1": true,
"var2": true
}
}
複製代碼
這樣在代碼中就能夠不定義 var1
var2
這兩個變量而直接使用了。
在 ESlint
附帶有大量的規則, 可使用上面提到的配置方式添加項目的 rules
規則。
以 indent
規則爲例,默認時四個空格, 當須要更改這個規則時候, 能夠有下面幾種寫法:
// 使用默認4個空格。 錯誤等級爲 2
"indent": 2
// 使用 2 個空格。 錯誤等級爲 2
"indent": [2, 2]
// 使用 tab 縮進。 錯誤等級爲 2
"indent": [2, "tab"]
// 縮進爲2個空格, 同時,switch...case結構的case也必須縮進
"indent": [2, 2, {"SwitchCase": 2}]
複製代碼
能夠看到, Rules
的配置規則是一個能夠包含三個參數的數組(只有第一個時能夠爲字符串):
第一個參數爲錯誤級別, 可使用 0 或者 off
(關閉規則)、 1 或者 warn
(開啓規則, 使用警告級別的錯誤, 不會致使程序退出)、 2 或者 error
(開啓規則, 使用錯誤級別的錯誤, 會致使程序退出)
第二個參數爲規則的選項, 在例子中分別配置了 indent
爲默認4個空格、2個空格、tab
縮進。
第三個參數爲額外參數, 例子中使用該參數開啓了 switch...case
縮進驗證。
ESlint
提供了衆多可配置的 Rules
, 一個一個配置是很是麻煩的。 ESlint
支持從已有的配置中繼承啓動的規則。
ESlint
提供了 eslint:recommended
配置, 它提供了一系列核心規則, 可使用 extends
屬性來繼承這些規則。
"extends": "eslint:recommended"
複製代碼
::: tip
extends
屬性值當只有一個時能夠是字符串, 多個時, 爲字符串數組。 :::除了繼承默認的 eslint:recommended
, 還能夠繼承一些優秀的開源規則集, 如 eslint-plugin-standard
, 使用方法也比較簡單。
npm install -D eslint-plugin-standard
複製代碼
{
"extends": ["eslint:recommended", "standard"]
}
複製代碼
::: tip
exlint-plugin-
extends
中的配置, 能夠在 rules
字段中進行覆蓋 :::插件是一個 npm
包,一般輸出一個或多個命名的規則配置。 上面說到能夠 extends
屬性來繼承規則, 咱們可使用 plugins
屬性來引入 一個 npm
包, 而後使用 extends
屬性來繼承這個 npm
包的某個規則集。
ESlint
的 npm
包。npm install eslint-plugin-react --save-dev
複製代碼
plugins
屬性引入插件{
"plugins": "react"
}
複製代碼
::: tip 在 ESlint 中, 使用外部 npm 包的時候, 省略前面 exlint-plugin-
:::
extends
繼承插件的某個規則{
"plugins": "react",
"extends": ["eslint:recommended", "plugin:react/recommended"]
}
複製代碼
在項目根目錄建立一個 .eslintignore
文件告訴 ESLint
去忽略特定的文件和目錄。.eslintignore
文件是一個純文本文件,其中的每一行都是一個 glob 模式代表哪些路徑應該忽略檢測。例如,如下將忽略全部的 JavaScript 文件:
**/*.js
複製代碼
或者也能夠在 package.json
文件中配置 eslintIgnore
字段來指定忽略文件
{
"eslintIgnore": ["hello.js", "world.js"]
}
複製代碼