這篇是基于之前整理的一篇關(guān)于ESLint入門之后,在深入了解了相關(guān)內(nèi)容的基礎(chǔ)上又整理出來的一篇,百分之四十與之前差不多,只是多了部分常用的規(guī)則。
1.安裝
1.1本地安裝(運(yùn)用到此項(xiàng)目)
$ npm install eslint --save-dev
1.2全局安裝(運(yùn)用到所有項(xiàng)目)
$ npm install -g eslint
2.配置
2.1使用 .eslintrc 文件
$ eslint --init
2.2在 package.json 中添加 eslintConfig配置塊
2.3直接在代碼文件中定義
2.3.1 禁用 ESLint:
/* eslint-disable */
var a = 100;
console.log(a);
/* eslint-enable */
2.3.2 禁用一條規(guī)則:
/*eslint-disable no-console */
var a = 100;
console.log(a);
/*eslint-enable no-console */
2.3.3 調(diào)整規(guī)則:
/* eslint no-console:0 */
var a = 100;
console.log(a);
3.錯(cuò)誤級(jí)別
- "off" or 0 - 關(guān)閉(禁用)規(guī)則
- "warn" or 1 - 將規(guī)則視為一個(gè)警告(并不會(huì)導(dǎo)致檢查不通過)
- "error" or 2 - 將規(guī)則視為一個(gè)錯(cuò)誤 (退出碼為1,檢查不通過)
- 有些規(guī)則還帶有可選的參數(shù)。
4.常用規(guī)則
類別 | 描述 |
---|---|
Possible Errors | 可能的錯(cuò)誤或邏輯錯(cuò)誤 |
no-cond-assign | 禁止條件表達(dá)式中出現(xiàn)模棱兩可的賦值操作符 |
no-console | 禁用console |
no-constant-condition | 禁止在條件中使用常量表達(dá)式 |
no-debugger | 禁用 debugger |
no-dupe-args | 禁止 function 定義中出現(xiàn)重名參數(shù) |
no-dupe-keys | 禁止對(duì)象字面量中出現(xiàn)重復(fù)的 key |
no-duplicate-case | 禁止出現(xiàn)重復(fù)的 case 標(biāo)簽 |
no-empty | 禁止出現(xiàn)空語句塊 |
no-ex-assign | 禁止對(duì) catch 子句的參數(shù)重新賦值 |
no-extra-boolean-cast | 禁止不必要的布爾轉(zhuǎn)換 |
no-extra-parens | 禁止不必要的括號(hào) |
no-extra-semi | 禁止不必要的分號(hào) |
no-func-assign | 禁止對(duì) function 聲明重新賦值 |
no-inner-declarations | 禁止在嵌套的塊中出現(xiàn)變量聲明或 function 聲明 |
no-irregular-whitespace | 禁止在字符串和注釋之外不規(guī)則的空白 |
no-obj-calls | 禁止把全局對(duì)象作為函數(shù)調(diào)用 |
no-sparse-arrays | 禁用稀疏數(shù)組 |
no-prototype-builtins | 禁止直接使用Object.prototypes 的內(nèi)置屬性 |
no-unexpected-multiline | 禁止出現(xiàn)令人困惑的多行表達(dá)式 |
no-unreachable | 禁止在return、throw、continue 和 break語句之后出現(xiàn)不可達(dá)代碼 |
use-isnan | 要求使用 isNaN() 檢查 NaN |
valid-typeof | 強(qiáng)制 typeof 表達(dá)式與有效的字符串進(jìn)行比較 |
----- | ----- |
Best Practices | 最佳實(shí)踐 |
array-callback-return | 強(qiáng)制數(shù)組方法的回調(diào)函數(shù)中有 return 語句 |
block-scoped-var | 強(qiáng)制把變量的使用限制在其定義的作用域范圍內(nèi) |
complexity | 指定程序中允許的最大環(huán)路復(fù)雜度 |
consistent-return | 要求 return 語句要么總是指定返回的值,要么不指定 |
curly | 強(qiáng)制所有控制語句使用一致的括號(hào)風(fēng)格 |
default-case | 要求 switch 語句中有 default 分支 |
dot-location | 強(qiáng)制在點(diǎn)號(hào)之前和之后一致的換行 |
dot-notation | 強(qiáng)制在任何允許的時(shí)候使用點(diǎn)號(hào) |
eqeqeq | 要求使用 === 和 !== |
guard-for-in | 要求 for-in 循環(huán)中有一個(gè) if 語句 |
no-alert | 禁用 alert、confirm 和 prompt |
no-case-declarations | 不允許在 case 子句中使用詞法聲明 |
no-else-return | 禁止 if 語句中有 return 之后有 else |
no-empty-function | 禁止出現(xiàn)空函數(shù) |
no-eq-null | 禁止在沒有類型檢查操作符的情況下與 null 進(jìn)行比較 |
no-eval | 禁用 eval() |
no-extra-bind | 禁止不必要的 .bind() 調(diào)用 |
no-fallthrough | 禁止 case 語句落空 |
no-floating-decimal | 禁止數(shù)字字面量中使用前導(dǎo)和末尾小數(shù)點(diǎn) |
no-implicit-coercion | 禁止使用短符號(hào)進(jìn)行類型轉(zhuǎn)換 |
no-implicit-globals | 禁止在全局范圍內(nèi)使用 var 和命名的 function 聲明 |
no-invalid-this: | 禁止 this 關(guān)鍵字出現(xiàn)在類和類對(duì)象之外 |
no-lone-blocks | 禁用不必要的嵌套塊 |
no-loop-func | 禁止在循環(huán)中出現(xiàn) function 聲明和表達(dá)式 |
no-magic-numbers | 禁用魔術(shù)數(shù)字 |
no-multi-spaces | 禁止使用多個(gè)空格 |
no-multi-str | 禁止使用多行字符串 |
no-new | 禁止在非賦值或條件語句中使用 new 操作符 |
no-new-func | 禁止對(duì) Function 對(duì)象使用 new 操作符 |
no-new-wrappers | 禁止對(duì) String,Number 和 Boolean 使用 new 操作符 |
no-param-reassign | 不允許對(duì) function 的參數(shù)進(jìn)行重新賦值 |
no-redeclare | 禁止使用 var 多次聲明同一變量 |
no-return-assign | 禁止在 return 語句中使用賦值語句 |
no-script-url | 禁止使用 javascript: url |
no-self-assign | 禁止自我賦值 |
no-self-compare | 禁止自身比較 |
no-sequences | 禁用逗號(hào)操作符 |
no-unmodified-loop-condition | 禁用一成不變的循環(huán)條件 |
no-unused-expressions | 禁止出現(xiàn)未使用過的表達(dá)式 |
no-useless-call | 禁止不必要的 .call() 和 .apply() |
no-useless-concat | 禁止不必要的字符串字面量或模板字面量的連接 |
vars-on-top | 要求所有的 var 聲明出現(xiàn)在它們所在的作用域頂部 |
----- | ----- |
Strict Mode | 使用嚴(yán)格模式和嚴(yán)格模式指 |
strict | 要求或禁止使用嚴(yán)格模式指令 |
----- | ----- |
Variables | 變量聲明 |
init-declarations | 要求或禁止 var 聲明中的初始化 |
no-catch-shadow | 不允許 catch 子句的參數(shù)與外層作用域中的變量同名 |
no-restricted-globals | 禁用特定的全局變量 |
no-shadow | 禁止 var 聲明 與外層作用域的變量同名 |
no-undef | 禁用未聲明的變量,除非它們?cè)?/global / 注釋中被提到 |
no-undef-init | 禁止將變量初始化為 undefined |
no-unused-vars | 禁止出現(xiàn)未使用過的變量 |
no-use-before-define | 不允許在變量定義之前使用它們 |
----- | ----- |
Nodejs and CommonJS | Node.js,CommonJS |
global-require | 要求 require() 出現(xiàn)在頂層模塊作用域中 |
handle-callback-err | 要求回調(diào)函數(shù)中有容錯(cuò)處理 |
no-mixed-requires | 禁止混合常規(guī) var 聲明和 require 調(diào)用 |
no-new-require | 禁止調(diào)用 require 時(shí)使用 new 操作符 |
no-path-concat | 禁止對(duì) dirname 和 filename進(jìn)行字符串連接 |
no-restricted-modules | 禁用指定的通過 require 加載的模塊 |
----- | ----- |
Stylistic Issues | 風(fēng)格指南 |
array-bracket-spacing | 強(qiáng)制數(shù)組方括號(hào)中使用一致的空格 |
block-spacing | 強(qiáng)制在單行代碼塊中使用一致的空格 |
brace-style | 強(qiáng)制在代碼塊中使用一致的大括號(hào)風(fēng)格 |
camelcase | 強(qiáng)制使用駱駝拼寫法命名約定 |
comma-spacing | 強(qiáng)制在逗號(hào)前后使用一致的空格 |
comma-style | 強(qiáng)制使用一致的逗號(hào)風(fēng)格 |
computed-property-spacing | 強(qiáng)制在計(jì)算的屬性的方括號(hào)中使用一致的空格 |
eol-last | 強(qiáng)制文件末尾至少保留一行空行 |
func-names | 強(qiáng)制使用命名的 function 表達(dá)式 |
func-style | 強(qiáng)制一致地使用函數(shù)聲明或函數(shù)表達(dá)式 |
indent | 強(qiáng)制使用一致的縮進(jìn) |
jsx-quotes | 強(qiáng)制在 JSX 屬性中一致地使用雙引號(hào)或單引號(hào) |
key-spacing | 強(qiáng)制在對(duì)象字面量的屬性中鍵和值之間使用一致的間距 |
keyword-spacing | 強(qiáng)制在關(guān)鍵字前后使用一致的空格 |
linebreak-style | 強(qiáng)制使用一致的換行風(fēng)格 |
lines-around-comment | 要求在注釋周圍有空行 |
max-depth | 強(qiáng)制可嵌套的塊的最大深度 |
max-len | 強(qiáng)制一行的最大長度 |
max-lines | 強(qiáng)制最大行數(shù) |
max-nested-callbacks | 強(qiáng)制回調(diào)函數(shù)最大嵌套深度 |
max-params | 強(qiáng)制 function 定義中最多允許的參數(shù)數(shù)量 |
max-statements | 強(qiáng)制 function 塊最多允許的的語句數(shù)量 |
max-statements-per-line | 強(qiáng)制每一行中所允許的最大語句數(shù)量 |
new-cap | 要求構(gòu)造函數(shù)首字母大寫 |
new-parens | 要求調(diào)用無參構(gòu)造函數(shù)時(shí)有圓括號(hào) |
newline-after-var | 要求或禁止 var 聲明語句后有一行空行 |
newline-before-return | 要求 return 語句之前有一空行 |
newline-per-chained-call | 要求方法鏈中每個(gè)調(diào)用都有一個(gè)換行符 |
no-array-constructor | 禁止使用 Array 構(gòu)造函數(shù) |
no-continue | 禁用 continue 語句 |
no-inline-comments | 禁止在代碼行后使用內(nèi)聯(lián)注釋 |
no-lonely-if | 禁止 if 作為唯一的語句出現(xiàn)在 else 語句中 |
no-mixed-spaces-and-tabs | 不允許空格和 tab 混合縮進(jìn) |
no-multiple-empty-lines | 不允許多個(gè)空行 |
no-negated-condition | 不允許否定的表達(dá)式 |
no-plusplus | 禁止使用一元操作符 ++ 和 -- |
no-spaced-func | 禁止 function 標(biāo)識(shí)符和括號(hào)之間出現(xiàn)空格 |
no-ternary | 不允許使用三元操作符 |
no-trailing-spaces | 禁用行尾空格 |
no-whitespace-before-property | 禁止屬性前有空白 |
object-curly-newline | 強(qiáng)制花括號(hào)內(nèi)換行符的一致性 |
object-curly-spacing | 強(qiáng)制在花括號(hào)中使用一致的空格 |
object-property-newline | 強(qiáng)制將對(duì)象的屬性放在不同的行上 |
one-var | 強(qiáng)制函數(shù)中的變量要么一起聲明要么分開聲明 |
one-var-declaration-per-line | 要求或禁止在 var 聲明周圍換行 |
operator-assignment | 要求或禁止在可能的情況下要求使用簡化的賦值操作符 |
operator-linebreak | 強(qiáng)制操作符使用一致的換行符 |
quote-props | 要求對(duì)象字面量屬性名稱用引號(hào)括起來 |
quotes | 強(qiáng)制使用一致的反勾號(hào)、雙引號(hào)或單引號(hào) |
require-jsdoc | 要求使用 JSDoc 注釋 |
semi | 要求或禁止使用分號(hào)而不是 ASI |
semi-spacing | 強(qiáng)制分號(hào)之前和之后使用一致的空格 |
sort-vars | 要求同一個(gè)聲明塊中的變量按順序排列 |
space-before-blocks | 強(qiáng)制在塊之前使用一致的空格 |
space-before-function-paren | 強(qiáng)制在 function的左括號(hào)之前使用一致的空格 |
space-in-parens | 強(qiáng)制在圓括號(hào)內(nèi)使用一致的空格 |
space-infix-ops | 要求操作符周圍有空格 |
space-unary-ops | 強(qiáng)制在一元操作符前后使用一致的空格 |
spaced-comment | 強(qiáng)制在注釋中 // 或 /* 使用一致的空格 |
5.實(shí)際項(xiàng)目中使用(Gulp中使用)
5.1 安裝插件
$ npm install gulp-eslint
5.2 應(yīng)用
var gulp = require('gulp');
var eslint = require('gulp-eslint');
gulp.task('lint',function(){
return gulp.src(['app/**/*.js']) //指定的校驗(yàn)路徑
.pipe(eslint({configFle:"./.eslintrc"})) //使用你的eslint校驗(yàn)文件
.pipe(eslint.format())
});
輸入命令行
$ gulp lint
就可以直接運(yùn)行了相應(yīng)的配置文件來校驗(yàn)文件了。
5.3 忽視
你可以通過在項(xiàng)目根目錄創(chuàng)建一個(gè) .eslintignore 文件告訴 ESLint 去忽略特定的文件和目錄。.eslintignore 文件是一個(gè)純文本文件,其中的每一行都是一個(gè) glob 模式表明哪些路徑應(yīng)該忽略檢測。例如,以下將忽略所有的 JavaScript 文件:
**/*.js
當(dāng) ESLint 運(yùn)行時(shí),在確定哪些文件要檢測之前,它會(huì)在當(dāng)前工作目錄中查找一個(gè) .eslintignore 文件。如果發(fā)現(xiàn)了這個(gè)文件,當(dāng)遍歷目錄時(shí),將會(huì)應(yīng)用這些偏好設(shè)置。一次只有一個(gè) .eslintignore 文件會(huì)被使用,所以,不是當(dāng)前工作目錄下的 .eslintignore 文件將不會(huì)被用到。
Globs 匹配使用 node-ignore,所以大量可用的特性有:
以 # 開頭的行被當(dāng)作注釋,不影響忽略模式。
路徑是相對(duì)于 .eslintignore 的位置或當(dāng)前工作目錄。這也會(huì)影響通過 --ignore-pattern傳遞的路徑。
忽略模式同 .gitignore 規(guī)范
-
以 ! 開頭的行是否定模式,它將會(huì)重新包含一個(gè)之前被忽略的模式。
除了 .eslintignore 文件中的模式,ESLint總是忽略 /node_modules/* 和 /bower_components/* 中的文件。
例如:把下面 .eslintignore 文件放到當(dāng)前工作目錄里,將忽略 node_modules,bower_components 和所有以 .ts.js 或者 .coffee.js 為擴(kuò)展名的文件以及 build/ 目錄下除了 build/index.js 的所有文件。
/node_modules/* and /bower_components/* ignored by default
Ignore built files except build/index.js
build/*
!build/index.js如果相比于當(dāng)前工作目錄下 .eslintignore 文件,你更想使用一個(gè)不同的文件,你可以在命令行使用 --ignore-path 選項(xiàng)指定它。例如,你可以使用 .jshintignore 文件,因?yàn)樗邢嗤母袷剑?/p>
eslint --ignore-path .jshintignore file.js
你也可以使用你的 .gitignore 文件:
eslint --ignore-path .gitignore file.js
任何文件只要滿足標(biāo)準(zhǔn)忽略文件格式都可以用。記住,指定 --ignore-path 意味著任何現(xiàn)有的 .eslintignore 文件將不被使用。請(qǐng)注意,.eslintignore 中的匹配規(guī)則比 .gitignore 中的更嚴(yán)格。