/**
* @Description: eslint配置詳解
* @author wfd
* @date 2020/8/8 14:25
* @detail
*1、運作 eslint --init 之後,.eslintrc 檔案會在你的檔案夾中自動建立
*2、{
* "rules": {
* "semi": ["error", "always"],
* "quotes": ["error", "double"]
* }
* }
*semi" 和 "quotes" 是 ESLint 中 規則 的名稱。第一個值是錯誤級别,可以使下面的值之一:
*
*"off" or 0 - 關閉規則
*"warn" or 1 - 将規則視為一個警告(不會影響退出碼)
*"error" or 2 - 将規則視為一個錯誤 (退出碼為1)
*3、同一目錄下 .eslintrc 和 package.json 同時存在,.eslintrc 優先級高會被使用,package.json 檔案将不會被使用。
*/
module.exports = {
/**
* 預設情況下,ESLint 會在所有父級目錄裡尋找配置檔案,一直到根目錄
* 為了将 ESLint 限制到一個特定的項目 設定 "root": true
* ESLint 一旦發現配置檔案中有 "root": true,它就會停止在父級目錄中尋找。
*/
root: true,
env: { // 指定環境
node: true, // Node.js 全局變量和 Node.js 作用域
browser: true // 浏覽器環境中的全局變量
},
extends: [ // 可以省略包名的字首 eslint-config-
'plugin:vue/recommended',
'@vue/standard',
'@vue/typescript/recommended'
],
parserOptions: { // 解析器選項
/**
* 指定你想要支援的 JavaScript 語言選項、可以使用 6、7、8、9 或 10 來指定你想要使用的 ECMAScript 版本
* 你也可以用使用年份命名的版本号指定為 2015(同 6),2016(同 7),或 2017(同 8)或 2018(同 9)或 2019 (same as 10)
*/
ecmaVersion: 2020,
// sourceType: 'script', // 設定為 "script" (預設) 或 "module"(如果你的代碼是 ECMAScript 子產品)。
/**
* EcmaFeatures是個對象,表示你想使用的額外的語言特性
* globalReturn - 允許在全局作用域下使用 return 語句
* impliedStrict - 啟用全局 strict mode (如果 ecmaVersion 是 5 或更高)
* jsx - 啟用 JSX
*/
ecmaFeatures: {
jsx: true
}
},
plugins: [ // 第三方插件 plugins 屬性值 可以省略包名的字首 eslint-plugin-。
'vue'
],
rules: { // 配置定義在插件中的一個規則的時候,你必須使用 插件名/規則ID 的形式 vue/attribute-hyphenation
eqeqeq: 0, // 不要求使用 === 和 !==
camelcase: 0, // 不強制使用駱駝拼寫法命名約定
indent: 0, // 不強制使用一緻的縮進
'no-console': 0, // 允許 console
'no-control-regex': 0, // 禁止在正規表達式中使用控制字元
'no-useless-escape': 0, // 不禁用不必要的轉義字元
'sort-keys': 0, // 不要求對象屬性按序排列
'eol-last': 0, // 不要求或不禁止檔案末尾存在空行
'line-comment-position': 0, // 強制行注釋的位置
'no-inline-comments': 0, // 禁止在代碼後使用内聯注釋
'no-multiple-empty-lines': 0, // 不禁止出現多行空行
'no-tabs': 0, // 不禁用 tab
'object-curly-spacing': 0, // 不強制在大括号中使用一緻的空格
'max-lines': 0, // 不強制最大行數
'max-len': 0, // 不強制一行的最大長度
'linebreak-style': 0, // 不強制使用一緻的換行風格
'comma-dangle': 0, // 要求或禁止末尾逗号
'no-mixed-spaces-and-tabs': 0, // 禁止空格和 tab 的混合縮進
'capitalized-comments': 0, // 不強制或禁止對注釋的第一個字母大寫
'no-trailing-spaces': 0, // 不禁用行尾空格
// love
'space-before-function-paren': 2, // 強制在 function 的左括号之前使用一緻的空格
'spaced-comment': 2, // 強制在注釋中 // 或 /* 使用一緻的空格
// vue相關
'vue/html-self-closing': 0,
'vue/attribute-hyphenation': 0,
'vue/order-in-components': 0,
'vue/max-attributes-per-line': 0,
'vue/mustache-interpolation-spacing': 0, // 大括号兩邊加空格
'vue/attributes-order': 0, // Class方法等順序問題
'vue/singleline-html-element-content-newline': 0,
'vue/multiline-html-element-content-newline': 0,
'vue/html-indent': 0,
'vue/no-v-html': 0,
'vue/html-closing-bracket-newline': 0,
// 與 JavaScript 代碼中可能的錯誤或邏輯錯誤有關
'for-direction': 2, // 強制 “for” 循環中更新子句的計數器朝着正确的方向移動
'getter-return': 2, // 強制 getter 函數中出現 return 語句
'no-async-promise-executor': 2, // 禁止使用異步函數作為 Promise executor
'no-await-in-loop': 2, // 禁止在循環中出現 await
'no-compare-neg-zero': 2, // 禁止與 -0 進行比較
'no-cond-assign': 2, // 禁止條件表達式中出現指派操作符
'no-constant-condition': 2, // 禁止在條件中使用常量表達式
'no-debugger': 2, // 是否禁用 debugger
'no-dupe-args': 2, // 禁止 function 定義中出現重名參數
'no-dupe-keys': 2, // 禁止對象字面量中出現重複的 key
'no-duplicate-case': 2, // 禁止出現重複的 case 标簽
'no-empty': 2, // 禁止出現空語句塊
'no-empty-character-class': 2, // 禁止在正規表達式中使用空字元集
'no-ex-assign': 2, // 禁止對 catch 子句的參數重新指派
'no-extra-boolean-cast': 2, // 禁止不必要的布爾轉換
'no-extra-parens': 2, // 禁止不必要的括号
'no-extra-semi': 2, // 禁止不必要的分号
'no-func-assign': 2, // 禁止對 function 聲明重新指派
'no-inner-declarations': 2, // 禁止在嵌套的塊中出現變量聲明或 function 聲明
'no-invalid-regexp': 2, // 禁止 RegExp 構造函數中存在無效的正規表達式字元串
'no-irregular-whitespace': 2, // 禁止不規則的空白
'no-misleading-character-class': 2, // 不允許在字元類文法中出現由多個代碼點組成的字元
'no-obj-calls': 2, // 禁止把全局對象作為函數調用
'no-prototype-builtins': 2, // 禁止直接調用 Object.prototypes 的内置屬性
'no-regex-spaces': 2, // 禁止正規表達式字面量中出現多個空格
'no-sparse-arrays': 2, // 禁用稀疏數組
'no-template-curly-in-string': 2, // 禁止在正常字元串中出現模闆字面量占位符文法
'no-unexpected-multiline': 2, // 禁止出現令人困惑的多行表達式
'no-unreachable': 2, // 禁止在 return、throw、continue 和 break 語句之後出現不可達代碼
'no-unsafe-finally': 2, // 禁止在 finally 語句塊中出現控制流語句
'no-unsafe-negation': 2, // 禁止對關系運算符的左操作數使用否定操作符
'require-atomic-updates': 2, // 禁止由于 await 或 yield的使用而可能導緻出現競态條件的指派
'use-isnan': 2, // 要求使用 isNaN() 檢查 NaN
'valid-typeof': 2, // 強制 typeof 表達式與有效的字元串進行比較
// 這些規則是關于最佳實踐的,幫助你避免一些問題
'accessor-pairs': 2, // 強制 getter 和 setter 在對象中成對出現
'array-callback-return': 2, // 強制數組方法的回調函數中有 return 語句
'block-scoped-var': 2, // 強制把變量的使用限制在其定義的作用域範圍内
'class-methods-use-this': 2, // 強制類方法使用 this
complexity: 2, // 指定程式中允許的最大環路複雜度
'consistent-return': 2, // 要求 return 語句要麼總是指定傳回的值,要麼不指定
curly: 2, // 強制所有控制語句使用一緻的括号風格
'default-case': 2, // 要求 switch 語句中有 default 分支
'dot-location': 2, // 強制在點号之前和之後一緻的換行
'dot-notation': 2, // 強制盡可能地使用點号
'guard-for-in': 2, // 要求 for-in 循環中有一個 if 語句
'max-classes-per-file': 2, // 強制每個檔案中包含的的類的最大數量
'no-alert': 2, // 禁用 alert、confirm 和 prompt
'no-caller': 2, // 禁用 arguments.caller 或 arguments.callee
'no-case-declarations': 2, // 不允許在 case 子句中使用詞法聲明
'no-div-regex': 2, // 禁止除法操作符顯式的出現在正規表達式開始的位置
'no-else-return': 2, // 禁止 if 語句中 return 語句之後有 else 塊
'no-empty-function': 2, // 禁止出現空函數
'no-empty-pattern': 2, // 禁止使用空解構模式
'no-eq-null': 2, // 禁止在沒有類型檢查操作符的情況下與 null 進行比較
'no-eval': 2, // 禁用 eval()
'no-extend-native': 2, // 禁止擴充原生類型
'no-extra-bind': 2, // 禁止不必要的 .bind() 調用
'no-extra-label': 2, // 禁用不必要的标簽
'no-fallthrough': 2, // 禁止 case 語句落空
'no-floating-decimal': 2, // 禁止數字字面量中使用前導和末尾小數點
'no-global-assign': 2, // 禁止對原生對象或隻讀的全局對象進行指派
'no-implicit-coercion': 2, // 禁止使用短符号進行類型轉換
'no-implicit-globals': 2, // 禁止在全局範圍内使用變量聲明和 function 聲明
'no-implied-eval': 2, // 禁止使用類似 eval() 的方法
'no-invalid-this': 2, // 禁止 this 關鍵字出現在類和類對象之外
'no-iterator': 2, // 禁用 __iterator__ 屬性
'no-labels': 2, // 禁用标簽語句
'no-lone-blocks': 2, // 禁用不必要的嵌套塊
'no-loop-func': 2, // 禁止在循環語句中出現包含不安全引用的函數聲明
'no-magic-numbers': 2, // 禁用魔術數字
'no-multi-spaces': 2, // 禁止使用多個空格
'no-multi-str': 2, // 禁止使用多行字元串
'no-new': 2, // 禁止使用 new 以避免産生副作用
'no-new-func': 2, // 禁止對 Function 對象使用 new 操作符
'no-new-wrappers': 2, // 禁止對 String,Number 和 Boolean 使用 new 操作符
'no-octal': 2, // 禁用八進制字面量
'no-octal-escape': 2, // 禁止在字元串中使用八進制轉義序列
'no-param-reassign': 2, // 禁止對 function 的參數進行重新指派
'no-proto': 2, // 禁用 __proto__ 屬性
'no-redeclare': 2, // 禁止多次聲明同一變量
'no-restricted-properties': 2, // 禁止使用對象的某些屬性
'no-return-assign': 2, // 禁止在 return 語句中使用指派語句
'no-return-await': 2, // 禁用不必要的 return await
'no-script-url': 2, // 禁止使用 javascript: url
'no-self-assign': 2, // 禁止自我指派
'no-self-compare': 2, // 禁止自身比較
'no-sequences': 2, // 禁用逗号操作符
'no-throw-literal': 2, // 禁止抛出異常字面量
'no-unmodified-loop-condition': 2, // 禁用一成不變的循環條件
'no-unused-expressions': 2, // 禁止出現未使用過的表達式
'no-unused-labels': 2, // 禁用出現未使用過的标
'no-useless-call': 2, // 禁止不必要的 .call() 和 .apply()
'no-useless-catch': 2, // 禁止不必要的 catch 子句
'no-useless-concat': 2, // 禁止不必要的字元串字面量或模闆字面量的連接配接
'no-useless-return': 2, // 禁止多餘的 return 語句
'no-void': 2, // 禁用 void 操作符
'no-warning-comments': 2, // 禁止在注釋中使用特定的警告術語
'no-with': 2, // 禁用 with 語句
'prefer-named-capture-group': 2, // 建議在正規表達式中使用命名捕獲組
'prefer-promise-reject-errors': 2, // 要求使用 Error 對象作為 Promise 拒絕的原因
radix: 2, // 強制在 parseInt() 使用基數參數
'require-await': 2, // 禁止使用不帶 await 表達式的 async 函數
'require-unicode-regexp': 2, // 強制在 RegExp 上使用 u 标志
'vars-on-top': 2, // 要求所有的 var 聲明出現在它們所在的作用域頂部
'wrap-iife': 2, // 要求 IIFE 使用括号括起來
yoda: 2, // 要求或禁止 “Yoda” // 條件
// 這些規則與變量聲明有關
'init-declarations': 2, // 要求或禁止?var?聲明中的初始化
'no-delete-var': 2, // 禁止删除變量
'no-label-var': 2, // 不允許标簽與變量同名
'no-restricted-globals': 2, // 禁用特定的全局變量
'no-shadow': 2, // 禁止變量聲明與外層作用域的變量同名
'no-shadow-restricted-names': 2, // 禁止将辨別符定義為受限的名字
'no-undef': 2, // 禁用未聲明的變量,除非它們在?/*global*/?注釋中被提到
'no-undef-init': 2, // 禁止将變量初始化為?undefined
'no-undefined': 2, // 禁止将?undefined?作為辨別符
'no-unused-vars': 2, // 禁止出現未使用過的變量
'no-use-before-define': 2, // 禁止在變量定義之前使用它們
// 這些規則是關于Node.js 或 在浏覽器中使用CommonJS 的:
'callback-return': 2, // 強制數組方法的回調函數中有?return?語句
'global-require': 2, // 要求?require()?出現在頂層子產品作用域中
'handle-callback-err': 2, // 要求回調函數中有容錯處理
'no-buffer-constructor': 2, // 禁用?Buffer()?構造函數
'no-mixed-requires': 2, // 禁止混合正常變量聲明和?require?調用
'no-new-require': 2, // 禁止調用?require?時使用?new?操作符
'no-path-concat': 2, // 禁止對?__dirname?和?__filename?進行字元串連接配接
'no-process-env': 2, // 禁用?process.env
'no-process-exit': 2, // 禁用?process.exit()
'no-restricted-modules': 2, // 禁用通過?require?加載的指定子產品
'no-sync': 2, // 禁用同步方法': 2, //
// 這些規則是關于風格指南的,而且是非常主觀的:
'array-bracket-newline': 2, // 在數組開括号後和閉括号前強制換行
'array-bracket-spacing': 2, // 強制數組方括号中使用一緻的空格
'array-element-newline': 2, // 強制數組元素間出現換行
'block-spacing': 2, // 禁止或強制在代碼塊中開括号前和閉括号後有空格
'brace-style': 2, // 強制在代碼塊中使用一緻的大括号風格
'comma-spacing': 2, // 強制在逗号前後使用一緻的空格
'comma-style': 2, // 強制使用一緻的逗号風格
'computed-property-spacing': 2, // 強制在計算的屬性的方括号中使用一緻的空格
'consistent-this': 2, // 當擷取目前執行環境的上下文時,強制使用一緻的命名
'func-call-spacing': 2, // 要求或禁止在函數辨別符和其調用之間有空格
'func-name-matching': 2, // 要求函數名與指派給它們的變量名或屬性名相比對
'func-names': 2, // 要求或禁止使用命名的?function?表達式
'func-style': 2, // 強制一緻地使用?function?聲明或表達式
'function-paren-newline': 2, // 強制在函數括号内使用一緻的換行
'id-blacklist': 2, // 禁用指定的辨別符
'id-length': 2, // 強制辨別符的最小和最大長度
'id-match': 2, // 要求辨別符比對一個指定的正規表達式
'implicit-arrow-linebreak': 2, // 強制隐式傳回的箭頭函數體的位置
'jsx-quotes': 2, // 強制在 JSX 屬性中一緻地使用雙引号或單引号
'key-spacing': 2, // 強制在對象字面量的屬性中鍵和值之間使用一緻的間距
'keyword-spacing': 2, // 強制在關鍵字前後使用一緻的空格
'lines-around-comment': 2, // 要求在注釋周圍有空行
'lines-between-class-members': 2, // 要求或禁止類成員之間出現空行
'max-depth': 2, // 強制可嵌套的塊的最大深度
'max-lines-per-function': 2, // 強制函數最大代碼行數
'max-nested-callbacks': 2, // 強制回調函數最大嵌套深度
'max-params': 2, // 強制函數定義中最多允許的參數數量
'max-statements': 2, // 強制函數塊最多允許的的語句數量
'max-statements-per-line': 2, // 強制每一行中所允許的最大語句數量
'multiline-comment-style': 2, // 強制對多行注釋使用特定風格
'multiline-ternary': 2, // 要求或禁止在三元操作數中間換行
'new-cap': 2, // 要求構造函數首字母大寫
'new-parens': 2, // 強制或禁止調用無參構造函數時有圓括号
'newline-per-chained-call': 2, // 要求方法鍊中每個調用都有一個換行符
'no-array-constructor': 2, // 禁用 Array 構造函數
'no-bitwise': 2, // 禁用按位運算符
'no-continue': 2, // 禁用 continue 語句
'no-lonely-if': 2, // 禁止 if 作為唯一的語句出現在 else 語句中
'no-mixed-operators': 2, // 禁止混合使用不同的操作符
'no-multi-assign': 2, // 禁止連續指派
'no-negated-condition': 2, // 禁用否定的表達式
'no-nested-ternary': 2, // 禁用嵌套的三元表達式
'no-new-object': 2, // 禁用 Object 的構造函數
'no-plusplus': 2, // 禁用一進制操作符 ++ 和 --
'no-restricted-syntax': 2, // 禁用特定的文法
'no-ternary': 2, // 禁用三元操作符
'no-underscore-dangle': 2, // 禁止辨別符中有懸空下劃線
'no-unneeded-ternary': 2, // 禁止可以在有更簡單的可替代的表達式時使用三元操作符
'no-whitespace-before-property': 2, // 禁止屬性前有空白
'nonblock-statement-body-position': 2, // 強制單個語句的位置
'object-curly-newline': 2, // 強制大括号内換行符的一緻性
'object-property-newline': 2, // 強制将對象的屬性放在不同的行上
'one-var': 2, // 強制函數中的變量要麼一起聲明要麼分開聲明
'one-var-declaration-per-line': 2, // 要求或禁止在變量聲明周圍換行
'operator-assignment': 2, // 要求或禁止在可能的情況下使用簡化的指派操作符
'operator-linebreak': 2, // 強制操作符使用一緻的換行符
'padded-blocks': 2, // 要求或禁止塊内填充
'padding-line-between-statements': 2, // 要求或禁止在語句間填充空行
'prefer-object-spread': 2, // 禁止使用以對象字面量作為第一個參數的 Object.assign,優先使用對象擴充。
'quote-props': 2, // 要求對象字面量屬性名稱用引号括起來
quotes: 2, // 強制使用一緻的反勾号、雙引号或單引号
semi: 2, // 要求或禁止使用分号代替': 2, // ASI
'semi-spacing': 2, // 強制分号之前和之後使用一緻的空格
'semi-style': 2, // 強制分号的位置
'sort-vars': 2, // 要求同一個聲明塊中的變量按順序排列
'space-before-blocks': 2, // 強制在塊之前使用一緻的空格
'space-in-parens': 2, // 強制在圓括号内使用一緻的空格
'space-infix-ops': 2, // 要求操作符周圍有空格
'space-unary-ops': 2, // 強制在一進制操作符前後使用一緻的空格
'switch-colon-spacing': 2, // 強制在 switch 的冒号左右有空格
'template-tag-spacing': 2, // 要求或禁止在模闆标記和它們的字面量之間有空格
'unicode-bom': 2, // 要求或禁止 Unicode 位元組順序标記 (BOM)
'wrap-regex': 2, // 要求正規表達式被括号括起來
// ES6
'arrow-body-style': 2, // 要求箭頭函數體使用大括号
'arrow-parens': 2, // 要求箭頭函數的參數使用圓括号
'arrow-spacing': 2, // 強制箭頭函數的箭頭前後使用一緻的空格
'constructor-super': 2, // 要求在構造函數中有?super()?的調用
'generator-star-spacing': 2, // 強制': 2, // generator': 2, // 函數中?*?号周圍使用一緻的空格
'no-class-assign': 2, // 禁止修改類聲明的變量
'no-confusing-arrow': 2, // 禁止在可能與比較操作符相混淆的地方使用箭頭函數
'no-const-assign': 2, // 禁止修改?const?聲明的變量
'no-dupe-class-members': 2, // 禁止類成員中出現重複的名稱
'no-duplicate-imports': 2, // 禁止重複子產品導入
'no-new-symbol': 2, // 禁止 Symbolnew 操作符和 new 一起使用
'no-restricted-imports': 2, // 禁止使用指定的?import?加載的子產品
'no-this-before-super': 2, // 禁止在構造函數中,在調用?super()?之前使用?this?或?super
'no-useless-computed-key': 2, // 禁止在對象中使用不必要的計算屬性
'no-useless-constructor': 2, // 禁用不必要的構造函數
'no-useless-rename': 2, // 禁止在 import 和 export 和解構指派時将引用重命名為相同的名字
'no-var': 2, // 要求使用?let?或?const?而不是?var
'object-shorthand': 2, // 要求或禁止對象字面量中方法和屬性使用簡寫文法
'prefer-arrow-callback': 2, // 要求回調函數使用箭頭函數
'prefer-const': 2, // 要求使用?const?聲明那些聲明後不再被修改的變量
'prefer-destructuring': 2, // 優先使用數組和對象解構
'prefer-numeric-literals': 2, // 禁用 parseInt() 和 Number.parseInt(),使用二進制,八進制和十六進制字面量
'prefer-rest-params': 2, // 要求使用剩餘參數而不是?arguments
'prefer-spread': 2, // 要求使用擴充運算符而非? .apply()
'prefer-template': 2, // 要求使用模闆字面量而非字元串連接配接
'require-yield': 2, // 要求 generator 函數内有 yield
'rest-spread-spacing': 2, // 強制剩餘和擴充運算符及其表達式之間有空格
'sort-imports': 2, // 強制子產品内的 import 排序
'symbol-description': 2, // 要求 symbol 描述
'template-curly-spacing': 2, // 要求或禁止模闆字元串中的嵌入表達式周圍空格的使用
'yield-star-spacing': 2, // 強制在 yield* 表達式中 * 周圍使用空格
},
overrides: [ // 為特定類型的檔案指定環境
{
files: [
'**/__tests__/*.{j,t}s?(x)',
'**/tests/unit/**/*.spec.{j,t}s?(x)'
],
env: {
jest: true // Jest 全局變量。
}
},
{ // 若要禁用一組檔案的配置檔案中的規則,請使用 overrides 和 files。例如:
files: [
'*-test.js',
'*.spec.js'
],
rules: {
'no-unused-expressions': 0
}
}
],
globals: { // 當通路目前源檔案内未定義的變量時,no-undef 規則将發出警告。如果你想在一個源檔案裡使用全局變量
uni: true,
wx: true,
ROUTES: true
}
}