web學(xué)習(xí)筆記09-ESLint規(guī)則整理與實(shí)際應(yīng)用

這篇是基于之前整理的一篇關(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
屏幕快照 2016-12-01 上午9.47.53.png

2.2在 package.json 中添加 eslintConfig配置塊

圖片.png

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)格。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,682評(píng)論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,183評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,435評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,665評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,838評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,379評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,627評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容

  • ESLint 配置 ESlint 被設(shè)計(jì)為完全可配置的,這意味著你可以關(guān)閉每一個(gè)規(guī)則而只運(yùn)行基本語法驗(yàn)證,或混合和...
    靜默虛空閱讀 41,450評(píng)論 3 14
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,312評(píng)論 4 31
  • EsLint入門學(xué)習(xí)整理 這兩天因?yàn)楣疽螅蛯?duì)ESLint進(jìn)行了初步的了解,網(wǎng)上的內(nèi)容基本上都差不多,但是內(nèi)容...
    點(diǎn)柈閱讀 26,056評(píng)論 3 42
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,829評(píng)論 18 139
  • 上一篇文章主要講了stylelint的簡單實(shí)用,這里續(xù)了一片關(guān)于規(guī)則什么的詳細(xì)點(diǎn)的文。 這篇文章主要是對(duì)style...
    點(diǎn)柈閱讀 6,302評(píng)論 0 4