eslint 靜態(tài)代碼檢測工具

ESLint最初是由Nicholas C. Zakas 于2013年6月創(chuàng)建的開源項目。它的目標是提供一個插件化的javascript代碼檢測工具。對比于jshint顯著的特點就是支持插件拓展還有就是支持jsx語法(jshint并不支持jsx,react開發(fā)老報錯也是很頭疼ㄟ( ▔, ▔ )ㄏ )。

命令行

具體的可以參考這里 傳送門 或者 eslint -h, 這里給出幾個常用的。

安裝

使用npm安裝,沒有npm的點這里https://www.npmjs.com/

npm i -g eslint

生成配置

eslint --init
//回答問題后生成eslint配置。

運行eslint

eslint [options] [file|dir|glob]*

//eslint file1.js file2.js
//eslint lib/**
//eslint "lib/**" glob模式要用引號

eslint配置

配置有這幾種方式:

  • 直接在代碼文件中定義,使用 JavaScript 注釋把配置信息直接嵌入到一個文件。
  • 使用 .eslintrc (json或者YAML)或者 .eslintrc.yml(YAML)或者 .eslintrc.js(javascript)或者 .eslintrc.json (JSON);
  • 在 package.json 中添加 eslintConfig 字段;

和jshint一樣有個忽略檢測文件的配置.eslintignore。
eslintrc執(zhí)行時會從檢測的文件一層層往上找配置文件,但是離檢測文件最近的文件優(yōu)先級最高,會覆蓋父級的配置。所以一般會在根目錄的配置中加一個:

# YAML
root: true

ESLint 一旦發(fā)現(xiàn)配置文件中有 "root": true,它就會停止在父級目錄中尋找。
如果項目內(nèi)沒有配置文件,會退回到系統(tǒng) ~/.eslintrc 中自定義的默認配置。

有很多信息可以被配置:

  • Environments - 指定腳本的運行環(huán)境。每種環(huán)境都有一組特定的預定義全局變量。
  • Globals - 腳本在執(zhí)行期間訪問的額外的全局變量。
  • Rules - 啟用的規(guī)則及各自的錯誤級別。

一個簡單的例子(.eslintrc.yml):

# YAML 
env:
  browser: true
parserOptions: 
  ecmaVersion: 6
  ecmaFeatures:
    jsx: true
globals :
   angular: true 
rules:
  camelcase: 0
  curly: 2
  brace-style: 
    - 2 
    - 1tbs
  quotes: 
    - 2 
    - single
  semi: 
    - 2 
    - always
  space-in-brackets:
    - 2 
    - never
  space-infix-ops: 2

1.parserOptions 解析器選項

#YAML
parserOptions: 
  ecmaVersion: 6
  ecmaFeatures:
    jsx: true

parserOptions 屬性設置解析器選項。可用的選項有:

  • ecmaVersion - 設置為 3, 5 (默認), 6、7 或 8 指定你想要使用的 ECMAScript 版本。你也可以指定為 2015(同 6),2016(同 7),或 2017(同 8)使用年份命名
  • sourceType - 設置為 "script" (默認) 或 "module"(如果你的代碼是 ECMAScript 模塊)。
  • ecmaFeatures - 這是個對象,表示你想使用的額外的語言特性:
    • globalReturn - 允許在全局作用域下使用 return 語句
    • impliedStrict - 啟用全局 strict mode (如果 ecmaVersion 是 5 或更高)
    • jsx - 啟用 JSX
    • experimentalObjectRestSpread - 啟用對實驗性的 object rest/spread properties 的支持。(重要:這是一個實驗性的功能,在未來可能會改變明顯。 建議你寫的規(guī)則 不要依賴該功能,除非當它發(fā)生改變時你愿意承擔維護成本。)

2.env 環(huán)境全局變量

# YAML
env:
  browser: true

環(huán)境定義了預定義的全局變量。可用的環(huán)境有:

  • browser - browser 全局變量。
  • node - Node.js 全局變量和 Node.js 作用域。
  • commonjs - CommonJS 全局變量和 CommonJS 作用域 (僅為使用 Browserify/WebPack 寫的只支持瀏覽器的代碼)。
  • shared-node-browser - Node 和 Browser 通用全局變量。
  • es6 - 支持除模塊外所有 ECMAScript 6 特性(該選項會自動設置 ecmaVersion 解析器選項為 6)。
  • worker - web workers 全局變量。
  • amd - 定義 require() 和 define() 作為像 amd 一樣的全局變量。
  • mocha - 添加所有的 Mocha 測試全局變量。
  • jasmine - 添加所有的 Jasmine 版本 1.3 和 2.0 的測試全局變量。
  • jest - Jest 全局變量。
  • phantomjs - PhantomJS 全局變量。
  • protractor - Protractor 全局變量。
  • qunit - QUnit 全局變量。
  • jquery - jQuery 全局變量。
  • prototypejs - Prototype.js 全局變量。
  • shelljs - ShellJS 全局變量。
  • meteor - Meteor 全局變量。
  • mongo - MongoDB 全局變量。
  • applescript - AppleScript 全局變量。
  • nashorn - Java 8 Nashorn 全局變量。
  • serviceworker - Service Worker 全局變量。
  • atomtest - Atom 測試全局變量。
  • embertest - Ember 測試全局變量。
  • webextensions - WebExtensions 全局變量。
  • greasemonkey - GreaseMonkey 全局變量。

3.globals全局變量

# YAML
globals :
   angular: true 
   var1: true
   var2: false

當訪問未定義的變量時,no-undef 規(guī)則將發(fā)出警告。如果你想在一個文件里使用全局變量,推薦你定義這些全局變量,這樣 ESLint 就不會發(fā)出警告了。你可以使用注釋或在配置文件中定義全局變量。

4.plugins 插件

ESLint 支持使用第三方插件。在使用插件之前,你必須使用 npm 安裝它。
在配置文件里配置插件,要使用 plugins ,其中包含插件名字的列表。插件名稱可以省略 eslint-plugin- 前綴。

# YAML
plugins:
    - plugin1
    - eslint-plugin-plugin2

注意:全局安裝的 ESLint 只能使用全局安裝的插件。本地安裝的 ESLint 不僅可以使用本地安裝的插件還可以使用全局安裝的插件。

5.Rules 規(guī)則

plugins:
  - plugin1
rules:
  curly: 2
  brace-style: 
    - 2 
    - 1tbs
  quotes: 
    - 2 
    - single
  plugin1/rule1 : error
  #配置定義在插件中的一個規(guī)則的時候,你必須使用 插件名/規(guī)則ID 的形式

ESLint 附帶有大量的規(guī)則。你可以使用注釋或配置文件修改你項目中要使用哪些規(guī)則。改變一個規(guī)則設置,你必須設置規(guī)則 ID 等于這些值之一:

  • "off" 或 0 - 關閉規(guī)則
  • "warn" 或 1 - 開啟規(guī)則,使用警告級別的錯誤:warn (不會導致程序退出)
  • "error" 或 2 - 開啟規(guī)則,使用錯誤級別的錯誤:error (當被觸發(fā)的時候,程序會退出)

具體的規(guī)則太多了這一看這里 : 傳送門

6.共享設置

# YAML
settings:
    sharedData: "Hello"

ESLint 支持在配置文件添加共享設置。你可以添加 settings 對象到配置文件,它將提供給每一個將被執(zhí)行的規(guī)則。如果你想添加的自定義規(guī)則而且使它們可以訪問到相同的信息,這將會很有用,并且很容易配置。

*行內(nèi)配置

禁止eslint檢測

//1.禁止規(guī)則出現(xiàn)警告
/* eslint-disable */
alert('foo');
/* eslint-enable */

//.2或者對指定的規(guī)則啟用或禁用警告
/* eslint-disable no-alert, no-console */
alert('foo');
console.log('bar');
/* eslint-enable no-alert, no-console */

//3.整個文件范圍內(nèi)禁止規(guī)則出現(xiàn)警告,將 /* eslint-disable */ 塊注釋放在文件頂部

//4.你也可以對整個文件啟用或禁用警告:
/* eslint-disable no-alert */
// Disables no-alert for the rest of the file

//5.單行注釋
alert('foo'); // eslint-disable-line
// eslint-disable-next-line
alert('foo');

*配置文件的繼承

一個配置文件可以被基礎配置中的已啟用的規(guī)則繼承

1 eslint:recommended

值為 "eslint:recommended" 的 extends 屬性啟用一系列核心規(guī)則,這些規(guī)則報告一些常見問題,在 規(guī)則頁面 中被標記為 。這個推薦的子集只能在 ESLint 主要版本進行更新。

# YAML
extends: eslint:recommended,
rules : 
  #enable additional rules
  indent: 
    - error
    - 4

2 extend npm包

繼承的可以是一個 npm 包,它輸出一個配置對象。要確保這個包安裝在 ESLint 能請求到的目錄下。extends 屬性值可以省略包名的前綴 eslint-config-。

# YAML
extends: standard
rules:
  comma-dangle:
    - error
    - always
  no-empty: warn

3 plugins npm包

一些插件也可以輸出一個或多個命名的 配置。要確保這個包安裝在 ESLint 能請求到的目錄下。plugins 屬性值 可以省略包名的前綴 eslint-plugin-。
extends 屬性值可以由以下組成:

  • plugin:
  • 包名 (省略了前綴,比如,react)
  • /
  • 配置名稱 (比如 recommended)
# JSON
{
    "plugins": [
        "react"
    ],
    "extends": [
        "eslint:recommended",
        "plugin:react/recommended"
    ],
    "rules": {
       "no-set-state": "off"
    }
}

4 繼承配置文件

extends 屬性值可以是基本配置文件的絕對路徑或相對路徑。

{
    "extends": [
        "./node_modules/coding-standard/eslintDefaults.js",
        "./node_modules/coding-standard/.eslintrc-es6",
        "./node_modules/coding-standard/.eslintrc-jsx"
    ],
    "rules": {
        "eqeqeq": "warn"
    }
}

參考
http://eslint.cn/
http://eslint.org/docs
https://csspod.com/getting-started-with-eslint/

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • ESLint 配置 ESlint 被設計為完全可配置的,這意味著你可以關閉每一個規(guī)則而只運行基本語法驗證,或混合和...
    靜默虛空閱讀 41,851評論 3 14
  • EsLint入門學習整理 這兩天因為公司要求,就對ESLint進行了初步的了解,網(wǎng)上的內(nèi)容基本上都差不多,但是內(nèi)容...
    點柈閱讀 26,238評論 3 42
  • 兩個月之前在項目中就開始使用 Eslint ,當時直接 copy 別人的 .eslintrc.js 文件,感覺好復...
    dkvirus閱讀 112,563評論 33 190
  • 前言 對于少量的代碼,我們通常能夠通過肉眼或者代碼編輯器,甚至控制臺出現(xiàn)的錯誤,找出對應有問題的代碼行,可以進行排...
    itclanCoder閱讀 1,526評論 1 2
  • ESLint簡介 ESLint是一款代碼規(guī)格檢查工具,能夠有效的保證團隊的代碼質(zhì)量,避免低級代碼。 ESlint特...
    Bilif閱讀 3,019評論 0 3

友情鏈接更多精彩內(nèi)容