天天看點

eslint最詳細規範整理

/**
 * @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
    }
}      

繼續閱讀