使用ESLint前:
eslint是幹嗎的,我這樣寫有什麼問題,怎麼還報錯了,太麻煩想去掉這個插件,腳手架中關於eslint文件裏的配置是什麼意思?
怎麼設置配置項和規則達到本身想要的檢測效果呢?怎麼集成到VSCODE實現自動修復呢?javascript
因此本片博文介紹ESLint是什麼,配置項的意思,啓用elsint推薦的規則及eslint-plugin-vue推薦規則檢測項目,集成到VScode修復可自動修復的選項。
但願這篇文章可讓你看得懂elsint文件裏的配置項及開啓/關閉規範規則保持代碼規範。vue
一.ESLint是什麼:java
二.配置項:node
1.配置方式:
1.1.JavaScript註釋:react
做用:臨時禁止某些lint 規則出現的警告。jquery
使用 JavaScript 註釋把配置信息直接嵌入到一個代碼源文件中程序員
/* eslint-disable */ alert('/* eslint-disable */ 塊註釋放在文件頂部,整個文件範圍內禁止規則出現警告'); /* eslint-disable-next-line */ alert('/* eslint-disable-next-line */塊放在上行,本行禁止出現警告'); alert('/* eslint-disable-next-line */塊放在本行後行,本行禁止出現警告'); /* eslint-disable-line */ /* eslint-disable no-alert, no-console */ /* eslint-enable no-alert, no-console */ alert('對指定的一個或者多個規則啓用或禁用警告'); console.log('對指定的一個或者多個規則啓用或禁用警告'); 上面的全部方法一樣適用於插件規則: 例如,禁止 eslint-plugin-example 的 rule-name 規則,把插件名(example)和規則名(rule-name)結合爲 example/rule-name: foo(); /* eslint-disable-line example/rule-name */
2.配置文件:es6
做用:通常用配置文件配置eslinttypescript
2.1ESLint 支持幾種格式的配置文件:npm
2.2 同一個目錄下有多個配置文件的優先級:
同一個目錄下有多個配置文件,ESLint 只會 使用 一個。優先級順序以下:
.eslintrc.js > .eslintrc.yaml > .eslintrc.yml > .eslintrc.json >.eslintrc(已經棄用) >package.json
2.3 層疊配置:
以下結構:
your-project
├── .eslintrc.js
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc.js
└── test.js
1.層疊配置使用離要檢測的文件最近的 .eslintrc文件做爲最高優先級,而後纔是父目錄裏的配置文件:
ESLint檢測時,lib/ 下面的全部文件將使用項目根目錄裏的 .eslintrc 文件做爲它的配置文件。---對應使用父目錄裏的配置文件(若有node_modules,node_modules文件夾內依賴的不會被使用,由於不是父目錄)
當 ESLint 遍歷到 test/ 目錄,your-project/.eslintrc 以外,它還會用到 your-project/tests/.eslintrc。
因此 your-project/tests/test.js 是基於它的目錄層次結構中的兩個.eslintrc 文件的組合,而且離的最近的一個優先。
2.將 ESLint 限制到一個特定的項目:
默認狀況下,ESLint 會在全部父級目錄裏尋找配置文件,一直到文件系統的根目錄。
爲了將 ESLint 限制到一個特定的項目,在你項目根目錄下的 package.json 文件或者 .eslintrc.* 文件裏的 eslintConfig 字段下設置 "root": true。
ESLint 一旦發現配置文件中有 "root": true,它就會中止在父級目錄中尋找。
2.4 解析器及解析器選項:
2.4.1 parser配置項:
做用:指定解析JavaScript的解析器。
ESLint 默認使用Espree做爲其解析器,解析JavaScript。
{ "parser": "Espree", "parserOptions":{} }
你能夠在配置文件中指定一個不一樣的解析器,只要該解析器符合下列要求:
它必須是一個 Node 模塊,能夠從它出現的配置文件中加載。一般,這意味着應該使用 npm 單獨安裝解析器包。
它必須符合 parser interface。
如下解析器與 ESLint 兼容:
Esprima
babel-eslint - 一個對Babel解析器的包裝,使其可以與 ESLint 兼容。
@typescript-eslint/parser - 將 TypeScript 轉換成與 estree 兼容的形式,以便在ESLint中使用。
在使用自定義解析器時,爲了讓 ESLint 在處理非 ECMAScript 5 特性時正常工做,配置屬性 parserOptions 仍然是必須的。
解析器會被傳入 parserOptions。(使用第三方插件會涉)
2.4.2 parserOptions 配置項:
做用:解析器選項,配置ES版本,sourceType,額外的語言特性。
parserOptions 屬性可用的選項有:
1.ecmaVersion - 默認設置爲 3,5(默認), 你可使用 6(或者年份同 2015)、七、八、9 或 10 來指定你想要使用的 ECMAScript 版本。
2.sourceType - 設置爲 "script" (默認) 或 "module"(若是你的代碼是 ECMAScript 模塊)。
3.ecmaFeatures - 這是個對象,表示你想使用的額外的語言特性:
globalReturn - 容許在全局做用域下使用 return 語句
impliedStrict - 啓用全局 strict mode (若是 ecmaVersion 是 5 或更高)
jsx - 啓用 JSX
設置解析器選項能幫助 ESLint 肯定什麼是解析錯誤,全部語言選項默認都是 false。
eslint支持 ES6 語法並不意味着同時支持 新的 ES6 全局變量或類型(好比 Set 等新類型)。
對於 ES6 語法,使用 { "parserOptions": { "ecmaVersion": 6 } },但{ "parserOptions": { "ecmaVersion": 6 } }不自動啓用es6全局變量,對於新的 ES6 全局變量,使用 { "env":{ "es6": true } }。
{ "env": { "es6": true } } 自動啓用es6語法和啓用es6全局變量。
2.5 globals:
做用:提早聲明全局變量,以避免ESLint 發出警告,有些變量是咱們引入的庫聲明的,須要提早在配置中聲明,例如jquery的$。
當訪問當前源文件內未定義的變量時,no-undef 規則將發出警告。
若是你想在一個源文件裏使用全局變量,推薦你在 ESLint 中定義這些全局變量,這樣 ESLint 就不會發出警告了。
要在配置文件中配置全局變量,請將 globals 配置屬性設置爲一個對象,該對象包含以你但願使用的每一個全局變量。
對於每一個全局變量鍵,將對應的值設置爲 "writable" 以容許重寫變量,或 "readonly" 不容許重寫變量。例如:
{ "globals": { "$": false, "var1": "writable", "var2": "readonly" } }
2.6 env 關鍵字指定你想啓用的環境
做用:在 globals 中一個個的進行聲明太過繁瑣,使用到 env就能避免這種繁瑣 ,env配置是對一個環境定義了一組預約義的全局變量。
可用的環境包括:
{
"env": { "browser": true, "node": true } }
2.7 plugins:
做用:使用他人寫好的規則插件。
使用第三方(規則)插件。在使用插件以前,你必須使用 npm 安裝它,是一個 npm 包,一般輸出規則,規則默認關閉。
使用 plugins 關鍵字來存放插件名字的列表。插件名稱能夠省略 eslint-plugin- 前綴。
{ "plugins": [ "plugin1", "eslint-plugin-plugin2" ] }
2.8 extends:
做用:啓用規則繼承。
啓用的規則繼承,屬性值能夠是:
1.指定配置的字符串(配置文件的路徑、可共享配置的名稱、eslint:recommended 或 eslint:all)
2.字符串數組:每一個配置繼承它前面的配置
extends 屬性值能夠由如下組成:
包名 (省略了前綴,好比,react)
/
配置名稱 (好比 recommended)
"plugins": [ "vue" ], "extends": [ "eslint:recommended",//啓用elsint推薦的規則 "plugin:vue/recommended" //啓用eslint-plugin-vue推薦的規則 ],
2.9 rules:
做用:檢測的規則。
ESLint 附帶有大量的規則,全部的規則默認都是禁用的。
在配置文件中,使用 "extends": "eslint:recommended" 來啓用推薦的規則,報告一些常見的問題,
在Eslint中文文檔中這些推薦的規則都帶有一個標記。
要改變一個規則設置,你必須將規則 ID 設置爲下列值之一:
使用數組連同錯誤級別和任何你想使用的選項
配置定義在插件中的一個規則的時候,你必須使用 插件名/規則ID 的形式。
{ "plugins": [ "plugin1" ], "rules": { "eqeqeq": "off", "curly": "error", "quotes": ["error", "double"], "plugin1/rule1": "error" } }
規則 plugin1/rule1 表示來自插件 plugin1 的 rule1 規則。
rules 屬性能夠作下面的任何事情以擴展(或覆蓋)規則:
如:
module.exports = { //值爲 "eslint:recommended" 的 extends 屬性啓用一系列核心 規則,這些規則報告一些常見問題,在 規則頁面 中被標記爲打勾。 "extends": "eslint:recommended", "rules": { // enable additional rules "indent": ["error", 4], "linebreak-style": ["error", "unix"], "quotes": ["error", "double"], "semi": ["error", "always"], // override default options for rules from base configurations "comma-dangle": ["error", "always"], "no-cond-assign": ["error", "always"], // disable rules from base configurations "no-console": "off", } }
三.使用eslint-plugin-vue插件規則:
3.1. eslint-plugin-vue:
Vue.js官方eslint插件,檢查.vue文件中的<template> and <script>,查找語法,vue指令,vue風格指南錯誤。
3.2.用法:
Example .eslintrc.js:
module.exports = { extends: [ // 在這裏添加通用的規則, 例如: 'eslint:recommended', 'plugin:vue/recommended'//extends裏面有這選項至關於多設置了,"parser": "vue-eslint-parser" ], rules: { // 在這裏覆蓋/添加 rules, 例如: // 'vue/no-unused-vars': 'error' } }
3.3.parser問題:
若是使用其餘通用parsers,如babel-eslint,須要把他寫在parserOptions.parser裏面而不是parser選項裏
由於eslint-plugin-vue須要vue-eslint-parser解析器.vue文件。重寫parser選項會致使eslint-plugin-vue不能使用。
- "parser": "babel-eslint", + "parser": "vue-eslint-parser", //extends裏面有'plugin:vue/recommended'至關於多設置了"parser": "vue-eslint-parser"。 "parserOptions": { + "parser": "babel-eslint", "sourceType": "module" }
3.4.plugin:vue/xxx的取值:
取值對應啓用的規則,訪問eslint-plugin-vue官網。
四. .eslintrc.js實例及集成到VSCODE自動修復
4.1.啓用eslint推薦規則和eslint-plugin-vue規則示例:
module.exports = { "root": true, "env": { "browser": true, "node": true, "es6": true, }, "parserOptions": { "parser": "babel-eslint", "sourceType": "module" } "extends": [ 'eslint:recommended', 'plugin:vue/recommended' ], "rules": { // 在這裏覆蓋/添加 rules, 例如: 'vue/no-unused-vars': 'error' } }
4.2.集成到VSCODE
需在VSCODE拓展中安裝Eslint插件,在VSCODE設置->settings.json
{ "prettier.semi": false,//設置語句結尾不加分號 "prettier.singleQuote": true,//設置單引號 "eslint.autoFixOnSave": true,//設置eslint自動處理可修復的規則 "eslint.validate": [ "javascript", "javascriptreact", {"language": "vue","autoFix": true}//處理可修復的vue檢測規則 ], "vetur.validation.template": false,//使用Vetur插件要關閉這項 }