這多是vue中eslintrc.js最詳細的介紹了

本文是對vue項目中自帶文件eslintrc.js的內容解析,
介紹了各個eslint配置項的做用,以及爲何這樣設置。
比較詳細,看完能對eslint有較爲全面的瞭解,基本解除對該文件的疑惑。
/**
 * 參考文檔
 * 【eslint英文文檔】https://eslint.org/docs/user-guide/configuring
 * 【eslint中文文檔】http://eslint.cn/docs/rules/
 */

/**
 * eslint有三種使用方式
 * 【1】js代碼中經過註釋的方式使用
 * 【2】經過webpack的eslintConfig字段設置,eslint會自動搜索項目的package.json文件中的配置
 * 【3】經過配置文件的方式使用,配置文件有多種文件方式,如JavaScript、JSON 或者 YAML等
 */

/**
 * 文件忽略
 * 【】讓eslint跳過特定文件的檢測
 * 【】經過當前工做目錄下 「.eslintignore」 文件進行設置
 *    其使用的是Glob路徑書寫方式,與「.gitignore」的使用方法相同
 * 【】也能夠在 package.json 文件中,經過 eslintIgnore 參數進行設置
 */

/**
 * 文件內局部設置
 * 【】eslint能夠具體文件中設置特定代碼的規則,經常使用於跳過某條語句的檢測。
 * 【】註銷所有規則,在代碼前新建一行,添加註銷 /* eslint-disable *\/   。若是沒有恢復設置的語句,則下列所有代碼都會跳過檢測。
 * 【】恢復eslint,在代碼前新建一行,添加註銷 /* eslint-enable *\/
 * 【】指定忽略的規則,/* eslint-disable no-alert, no-console *\/
 * 【】在特定行禁用,// eslint-disable-line
 * 【】在下一行禁用,// eslint-disable-next-line
 */

module.exports = {

  /**
   * 根目錄標識
   *  http://eslint.cn/docs/user-guide/configuring#using-configuration-files
   *  http://eslint.cn/docs/user-guide/configuring#configuration-cascading-and-hierarchy
   * 【】標識當前配置文件爲最底層的文件,無需往更上一級的文件目錄中進行搜索
   * 【】默認eslint的配置文件搜索方式是,從目標文件夾進行搜索,遍歷內部每個文件夾,找到配置文件並層疊使用。再跳出本項目,往祖先文件夾進行遍歷
   * 【】注意「~/.eslintrc」的意義,「~」是指linux上的家目錄,「~/.eslintrc」是指家目錄下的eslint配置文件,用於私人開發者,用於整個電腦全局約束的。這個配置經過本配置項root去設置,設置了root,eslint檢測時將不會再往上搜索
   * 【】eslint的生效規則是就近使用,越近的配置項優先級越高,覆蓋其餘配置項。如一個項目中,能夠在不一樣文件夾中都添加配置文件,這些規則將重疊組合生效
   */
  root: true, // 標識當前配置文件爲eslint的根配置文件,讓其中止在父級目錄中繼續尋找。


  /**
   * 解析器
   *  http://eslint.cn/docs/user-guide/configuring#specifying-parser
   * 【】ESLint 默認使用Espree做爲其解析器
   * 【】解析器必須是本地安裝的一個 npm 模塊。即必須按照在本地的node_module中
   * 【】解析器是用於解析js代碼的,怎麼去理解每個表達式,有點C++中編譯器的概念,會對js進行一些語法分析,語義分析什麼的,才能判斷語句符不符合規範。而不是經過簡單的字符串對比。
   * 【】解析器有不少,但兼容eslint的解析器有如下幾個
   *  Espree:默認解析器,一個從Esprima中分離出來的解析器,作了一些優化
   *  Esprima:js標準解析器
   *  Babel-ESLint: 一個對Babel解析器的包裝,babel自己也是js解析器的一種(否則怎麼能轉化爲兼容性代碼呢?首先須要進行js解析,才能轉化)。若是咱們的代碼須要通過babel轉化,則對應使用這個解析器
   *  typescript-eslint-parser(實驗) - 一個把 TypeScript 轉換爲 ESTree 兼容格式的解析器
   * 【】可是一般在vue項目中,並不會寫在 parser 字段中,而是寫在 parserOptions -> parser。具體緣由在 parserOptions 一欄中介紹
   */
  // parser: 'babel-eslint',


  /**
   * 解析器配置項
   *  http://eslint.cn/docs/user-guide/configuring#specifying-parser-options
   * 【】這裏設置的配置項將會傳遞到解析器中,被解析器獲取到,進行必定的處理。具體被利用到,要看解析器的源碼有沒有對其進行利用。這裏僅僅作了參數定義,作了規定,告訴解析器的開發者可能有這些參數
   * 【】配置項目有:
   * "sourceType": "module",    // 指定JS代碼來源的類型,script(script標籤引入?) | module(es6的module模塊),默認爲script。爲何vue的會使用script呢?由於vue是經過babel-loader編譯的,而babel編譯後的代碼就是script方式
   * "ecmaVersion": 6,          // 支持的ES語法版本,默認爲5。注意只是語法,不包括ES的全局變量。全局變量須要在env選項中進行定義
   * "ecmaFeatures": {          // Features是特徵的意思,這裏用於指定要使用其餘那些語言對象
       "experimentalObjectRestSpread": true,  //啓用對對象的擴展
       "jsx": true,                           //啓用jsx語法
       "globalReturn":true,                   //容許return在全局使用
       "impliedStrict":true                   //啓用嚴格校驗模式
     }
   */
  parserOptions: {
    /**
     * 這裏出現 parser 的緣由
     * 【】首先明確一點,官方說明中,parserOptions的配置參數是不包括 parser 的
     * 【】這裏的寫 parser 是 eslint-plugin-vue 的要求,是 eslint-plugin-vue 的自定義參數
     * 【】根據官方文檔,eslint-plugin-vue 插件依賴 「vue-eslint-parser」解析器。「vue-eslint-parser」解析器,只解析 .vue 中html部分的內容,不會檢測<script>中的JS內容。
     * 【】因爲解析器只有一個,用了「vue-eslint-parser」就不能用「babel-eslint」。因此「vue-eslint-parser」的作法是,在解析器選項中,再傳入一個解析器選項parser。從而在內部處理「babel-eslint」,檢測<script>中的js代碼
     * 【】因此這裏出現了 parser
     * 【】相關文檔地址,https://vuejs.github.io/eslint-plugin-vue/user-guide/#usage
     */
    parser: 'babel-eslint',
  },


  /**
   * 運行環境
   *  http://eslint.cn/docs/user-guide/configuring#specifying-environments
   * 【】一個環境定義了一組預約義的全局變量
   * 【】得到了特定環境的全局定義,就不會認爲是開發定義的,跳過對其的定義檢測。不然會被認爲改變量未定義
   * 【】常見的運行環境有如下這些,更多的可查看官網
   *  browser - 瀏覽器環境中的全局變量。
   *  node - Node.js 全局變量和 Node.js 做用域。
   *  es6 - 啓用除了 modules 之外的全部 ECMAScript 6 特性(該選項會自動設置 ecmaVersion 解析器選項爲 6)。
   *  amd - 將 require() 和 define() 定義爲像 amd 同樣的全局變量。
   *  commonjs - CommonJS 全局變量和 CommonJS 做用域 (用於 Browserify/WebPack 打包的只在瀏覽器中運行的代碼)。
   *  jquery - jQuery 全局變量。
   *  mongo - MongoDB 全局變量。
   *  worker - Web Workers 全局變量。
   *  serviceworker - Service Worker 全局變量。
   */
  env: {
    browser: true, // 瀏覽器環境
  },


  /**
   * 全局變量
   * http://eslint.cn/docs/user-guide/configuring#specifying-globals
   * 【】定義額外的全局,開發者自定義的全局變量,讓其跳過no-undef 規則
   * 【】key值就是額外添加的全局變量
   * 【】value值用於標識該變量可否被重寫,相似於const的做用。true爲容許變量被重寫
   * 【】注意:要啓用no-global-assign規則來禁止對只讀的全局變量進行修改。
   */
  globals: {
    // gTool: true, // 例如定義gTool這個全局變量,且這個變量能夠被重寫
  },


  /**
   * 插件
   * http://eslint.cn/docs/user-guide/configuring#configuring-plugins
   * 【】插件一樣須要在node_module中下載
   * 【】注意插件名忽略了「eslint-plugin-」前綴,因此在package.json中,對應的項目名是「eslint-plugin-vue」
   * 【】插件的做用相似於解析器,用以擴展解析器的功能,用於檢測很是規的js代碼。也可能會新增一些特定的規則。
   * 【】如 eslint-plugin-vue,是爲了幫助咱們檢測.vue文件中 <template> 和 <script> 中的js代碼
   */
  plugins: ['vue'],


  /**
   * 規則繼承
   * http://eslint.cn/docs/user-guide/configuring#extending-configuration-files
   *【】可繼承的方式有如下幾種
   *【】eslint內置推薦規則,就只有一個,即「eslint:recommended」
   *【】可共享的配置, 是一個 npm 包,它輸出一個配置對象。即經過npm安裝到node_module中
   *   可共享的配置能夠省略包名的前綴 eslint-config-,即實際設置安裝的包名是 eslint-config-airbnb-base
   *【】從插件中獲取的規則,書寫規則爲 「plugin:插件包名/配置名」,其中插件報名也是能夠忽略「eslint-plugin-」前綴。如'plugin:vue/essential'
   *【】從配置文件中繼承,即繼承另外的一個配置文件,如'./node_modules/coding-standard/eslintDefaults.js'
   */
  extends: [
    /**
     * vue 的額外添加的規則是 v-if, v-else 等指令檢測
     */
    'plugin:vue/essential', // 額外添加的規則可查看 https://vuejs.github.io/eslint-plugin-vue/rules/
    /**
     * 「airbnb,愛彼迎」
     * 【】有兩種eslint規範,一種是自帶了react插件的「eslint-config-airbnb」,一種是基礎款「eslint-config-airbnb-base」,
     * 【】airbnb-base 包括了ES6的語法檢測,須要依賴 「eslint-plugin-import」
     * 【】因此在使用airbnb-base時,須要用npm額外下載 eslint-plugin-import
     * 【】因此eslint實際上已經由於 airbnb-base 基礎配置項目,添加上了 eslint-plugin-import 插件配置
     * 【】因此在setting和rules裏,都有 'import/xxx' 項目,這裏修改的就是 eslint-plugin-import 配置
     */
    // 'airbnb-base',
  ],


  /**
   * 規則共享參數
   * http://eslint.cn/docs/user-guide/configuring#adding-shared-settings
   * 【】提供給具體規則項,每一個參數值,每一個規則項都會被注入該變量,但對應規則而言,有沒有用,就看各個規則的設置了,就比如 parserOptions,解析器用不用它就不知道了。這裏只是提供這個方法
   * 【】不用懷疑,經源碼驗證,這就是傳遞給每一個規則項的,會當作參數傳遞過去,但用不用,就是具體規則的事情
   */
  settings: {
    /**
     *
     * 注意,「import/resolver」並非eslint規則項,與rules中的「import/extensions」不一樣。它不是規則項
     * 這裏只是一個參數名,叫「import/resolver」,會傳遞給每一個規則項。
     * settings並無具體的書寫規則,「import/」只是import模塊本身起的名字,原則上,它直接命名爲「resolver」也能夠,加上「import」只是爲了更好地區分。不是強制設置的。
     * 由於「import」插件不少規則項都用的這個配置項,因此並無經過rules設置,而是經過settings共享
     * 具體使用方法可參考https://github.com/benmosher/eslint-plugin-import
     */
    'import/resolver': {
      /**
       * 這裏傳入webpack並非import插件能識別webpack,並且經過npm安裝了「eslint-import-resolver-webpack」,
       * 「import」插件經過「eslint-import-resolver-」+「webpack」找到該插件並使用,就能解析webpack配置項。使用裏面的參數。
       * 主要是使用如下這些參數,共享給import規則,讓其正確識別import路徑
       * extensions: ['.js', '.vue', '.json'],
       * alias: {
       *  'vue$': 'vue/dist/vue.esm.js',
       *  '@': resolve('src'),
       *  'static': resolve('static')
       * }
       */
      webpack: {
        config: 'build/webpack.base.conf.js'
      }
    }
  },

  /**
   * 針對特定文件的配置
   * 【】能夠經過overrides對特定文件進行特定的eslint檢測
   * 【】特定文件的路徑書寫使用Glob格式,一個相似正則的路徑規則,能夠匹配不一樣的文件
   * 【】配置幾乎與 ESLint 的其餘配置相同。覆蓋塊能夠包含常規配置中的除了 extends、overrides 和 root 以外的其餘任何有效配置選項,
   */
  // overrides: [
  //   {
  //     'files': ['bin/*.js', 'lib/*.js'],
  //     'excludedFiles': '*.test.js',
  //     'rules': {
  //       'quotes': [2, 'single']
  //     }
  //   }
  // ],

  /**
   * 自定義規則
   * http://eslint.cn/docs/user-guide/configuring#configuring-rules
   * 【】基本使用方式
   *  "off" 或者0 關閉規則
   *  "warn" 或者1 將規則打開爲警告(不影響退出代碼)
   *  "error" 或者2 將規則打開爲錯誤(觸發時退出代碼爲1)
   *  如:'no-restricted-syntax': 0, // 表示關閉該規則
   * 【】若是某項規則,有額外的選項,能夠經過數組進行傳遞,而數組的第一位必須是錯誤級別。如0,1,2
   *  如 'semi': ['error', 'never'], never就是額外的配置項
   */
  rules: {
    /**
     * 具體規則
     * 【】具體的規則太多,就不作介紹了,有興趣的同窗能夠上eslint官網查
     * 【】注意 xxx/aaa 這些規則是 xxx 插件自定的規則,在eslint官網是查不到的。須要到相應的插件官網中查閱
     * 【】如 import/extensions,這是「eslint-plugin-import」自定義的規則,須要到其官網查看 https://github.com/benmosher/eslint-plugin-import
     */
    /**
     * 邏輯錯誤及最佳實踐的規則
     */
    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, // 打包時禁止debugger
    'no-console': process.env.NODE_ENV === 'production' ? 2 : 0, // 打包時禁止console
    'no-alert': process.env.NODE_ENV === 'production' ? 2 : 0, // 打包時禁止console
    "for-direction": 2, // 禁止for無限循環
    "no-compare-neg-zero": 2, // 禁止與-0進行比較
    'no-cond-assign': 2, // 禁止條件語句中出現賦值語句
    "no-control-regex": 2, // 在 ASCII 中,0-31 範圍內的控制字符是特殊的、不可見的字符。這些字符不多被用在 JavaScript 字符串中,因此一個正則表達式若是包含這些字符的,頗有可能一個錯誤。
    "no-dupe-args": 2, // 禁止在函數定義或表達中出現重名參數
    "no-dupe-keys": 2, // 禁止在對象字面量中出現重複的鍵
    "no-duplicate-case": 2, // 禁止重複 case 標籤
    "no-empty": 2, // 禁止空塊語句
    "no-empty-character-class": 2, // 禁止在正則表達式中出現空字符集
    "no-ex-assign": 2, // 禁止對 catch 子句中的異常從新賦值。由於catch出來的都是錯誤信息,不須要從新賦值
    "no-extra-boolean-cast": 2, // 禁止沒必要要的布爾類型轉換,如 !!true
    "no-extra-semi": 2, // 禁用沒必要要的分號
    "no-inner-declarations": 2, // ??? 禁止在嵌套的語句塊中出現變量
    "no-regex-spaces": 2, // 禁止正則表達式字面量中出現多個空格
    "no-obj-calls": 2, // 禁止將全局對象看成函數進行調用
    "no-prototype-builtins": 2, // ??? 禁止直接在對象實例上調用 Object.prototype 的一些方法。
    "no-template-curly-in-string": 2, // 禁止在常規字符串中出現模板字面量佔位符語法
    "semi": [2, 'never'], // ??? 強制是否使用分號。
    "no-unexpected-multiline": 2, // 禁止使用使人困惑的多行表達式
    "no-unreachable": 2, // 禁止在 return、throw、continue 和 break 語句後出現不可達代碼
    "use-isnan": 2, // 要求調用 isNaN()檢查 NaN
    "no-unsafe-negation": 2, // 禁止對關係運算符的左操做數使用否認操做符
    "valid-jsdoc": 2, // 強制使用有效的 JSDoc 註釋
    "valid-typeof": 2, // 強制 typeof 表達式與有效的字符串進行比較
    "array-callback-return": 2, // 強制數組方法的回調函數中有 return 語句
    "block-scoped-var": 2, // 把 var 語句看做是在塊級做用域範圍以內
    "complexity": [1, 6], // 添加複雜度
    "curly": 2, // ??? 要求遵循大括號約定
    "default-case": 1, // 要求 Switch 語句中有 Default 分支
    "dot-location": [2, 'property'], // 強制在點號以前換行
    "dot-notation": 2, // 點號和字面量,優先使用點號
    "eqeqeq": [2, 'smart'], // ??? 要求使用 === 和 !==
    "guard-for-in": 2, // ??? 須要約束 for-in
    "no-caller": 2, // 禁用 caller 或 callee
    "no-empty-function": 2, // 禁止出現空函數
    "no-empty-pattern": 2, // 禁止使用空解構模式
    "no-eval": 2, // 禁用 eval()
    "no-global-assign": 2, // 禁止對原生對象或只讀的全局對象進行賦值
    "no-floating-decimal": 2, // ?? 禁止浮點小數
    "no-fallthrough": 2, // 禁止 case 語句落空
    "no-labels": 2, // 禁用標籤語句
    "no-extra-label": 2, // 禁用沒必要要的標籤
    "no-extra-bind": 2, // 禁止沒必要要的函數綁定
    "no-iterator": 2, // 禁用迭代器
    "no-lone-blocks": 2, // 禁用沒必要要的嵌套塊
    "no-loop-func": 2, // 禁止循環中存在函數
    "no-magic-numbers": [2, {
      ignoreArrayIndexes: true,
      ignore: [-1, 0, 1, 2],
    }], // 禁止使用魔術數字,魔術數字是在代碼中屢次出現的沒有明確含義的數字。它最好由命名常量取代。
    "no-multi-spaces": 2, // 禁止出現多個空格
    "no-multi-str": 2, // 禁止多行字符串
    "no-new": 2, // 禁止在不保存實例的狀況下使用new
    "no-new-func": 2, // 禁用Function構造函數
    "no-new-wrappers": 2, // 禁止原始包裝實例
    "no-octal": 2, // 禁用八進制字面量
    "no-octal-escape": 2, // 禁止在字符串字面量中使用八進制轉義序列
    "no-param-reassign": 2, // ??? 禁止對函數參數再賦值
    "no-proto": 2, // 禁用__proto__,改用 getPrototypeOf 方法替代 __proto__。
    "no-redeclare": 2, // 禁止從新聲明變量
    "no-return-assign": 2, // 禁止在返回語句中賦值
    "no-return-await": 2, // 禁用沒必要要的 return await
    "no-script-url": 2, // 禁用 Script URL
    "no-self-assign": 2, // 禁止自身賦值
    "no-sequences": 2, // ??? 不容許使用逗號操做符
    "no-throw-literal": 2, // 限制能夠被拋出的異常
    "no-unmodified-loop-condition": 2, // 禁用一成不變的循環條件
    "no-useless-call": 2, // 禁用沒必要要的 .call() 和 .apply()
    "no-useless-concat": 2, // 禁止沒有必要的字符拼接
    "no-useless-escape": 2, // 禁用沒必要要的轉義
    "no-useless-return": 2, // 禁止多餘的 return 語句
    "no-void": 2, // 禁止使用void操做符
    "no-with": 2, // 禁用 with 語句
    "prefer-promise-reject-errors": 1, // ??? 要求使用 Error 對象做爲 Promise 拒絕的緣由
    "radix": 1, // 要求必須有基數
    "require-await": 2, // 禁止使用不帶 await 表達式的 async 函數
    "vars-on-top": 2, // 要求將變量聲明放在它們做用域的頂部
    "wrap-iife": [2, 'inside'], // 須要把當即執行的函數包裹起來
    "strict": [2, 'global'], // 要求或禁止使用嚴格模式指令
    /**
     * 變量相關的規則
     */
    "init-declarations": 2, // ??? 強制或禁止變量聲明語句中初始化
    "no-delete-var": 2, // 禁止刪除變量
    "no-shadow": 2, // 禁止變量聲明覆蓋外層做用域的變量
    "no-shadow-restricted-names": 2, // 關鍵字不能被遮蔽
    "no-undef": 2, // 禁用未聲明的變量
    "no-unused-vars": 1, // ??? 禁止未使用過的變量
    "no-use-before-define": 2, // 禁止定義前使用
    // 代碼風格
    "array-bracket-newline": [2, 'consistent'], // 在數組開括號後和閉括號前強制換行
    "array-bracket-spacing": 2, // 強制在括號內先後使用空格
    "array-element-newline": [2, { multiline: true }], // ??? 強制數組元素間出現換行
    "block-spacing": 2, // 強制在代碼塊中開括號前和閉括號後有空格
    "brace-style": 2, // 大括號風格要求
    "camelcase": 2, // 要求使用駱駝拼寫法
    "comma-dangle": [2, 'always-multiline'], // 要求或禁止使用拖尾逗號
    "comma-spacing": 2, // 強制在逗號周圍使用空格
    "comma-style": 2, // 逗號風格
    "computed-property-spacing": 2, // 禁止或強制在計算屬性中使用空格
    "consistent-this": [2, 'self'], // ??? 要求一致的 This
    "eol-last": [1, 'always'], // ??? 要求或禁止文件末尾保留一行空行
    "func-call-spacing": 2, // 要求或禁止在函數標識符和其調用之間有空格
    "func-style": [2, 'declaration'], // ??? 強制 function 聲明或表達式的一致性
    "function-paren-newline": [1, 'multiline'], // 強制在函數括號內使用一致的換行
    "indent": [2, 2], // 強制使用一致的縮進
    "jsx-quotes": 2, // 強制在 JSX 屬性中一致地使用雙引號或單引號
    "key-spacing": 2, // 強制在對象字面量的鍵和值之間使用一致的空格
    "keyword-spacing": 2, // 強制關鍵字周圍空格的一致性
    "linebreak-style": 2, // 強制使用一致的換行符風格,用\n,不用\r\n
    "lines-around-comment": 2, // 強制註釋周圍有空行
    "lines-between-class-members": 2, // 要求在類成員之間出現空行
    "max-depth": 2, // 強制塊語句的最大可嵌套深度
    "max-len": [2, { // 強制行的最大長度
      "code": 100,
      "tabWidth": 4,
      "ignoreUrls": true,
      "ignoreTrailingComments": true,
      "ignoreTemplateLiterals": true,
    }], //
    "max-lines": [2, 1000], // ??? 強制文件的最大行數
    "max-nested-callbacks": [2, 5], // 強制回調函數最大嵌套深度
    "max-statements-per-line": 2, // 強制每一行中所容許的最大語句數量
    "multiline-comment-style": 1, // 強制對多行註釋使用特定風格
    "new-cap": 2, // 要求構造函數首字母大寫
    "new-parens": 2, // 要求調用無參構造函數時帶括號
    "newline-per-chained-call": 2, // 要求方法鏈中每一個調用都有一個換行符
    "no-bitwise": 2, // 禁止使用按位操做符
    "no-inline-comments": 0, // ??? 禁止使用內聯註釋
    "no-lonely-if": 2, // 禁止 if 語句做爲惟一語句出如今 else 語句塊中
    "no-mixed-spaces-and-tabs": 2, // 禁止使用 空格 和 tab 混合縮進
    "no-multiple-empty-lines": 1, // ??? 不容許多個空行
    "no-negated-condition": 2, // 禁用否認表達式
    "no-nested-ternary": 2, // 禁止使用嵌套的三元表達式
    "no-new-object": 2, // 禁止使用 Object 構造函數
    "no-trailing-spaces": 2, // 禁用行尾空白
    "no-underscore-dangle": 2, // 禁止標識符中有懸空下劃線
    "quotes": [2, 'single'], // 強制使用一致的單引號
    "quote-props": [2, 'as-needed'], // ??? 要求對象字面量屬性名稱使用引號
    "operator-linebreak": [2, 'before'], // 強制操做符使用一致的換行符風格
    "one-var": [2, 'never'], // ??? 強制函數中的變量在一塊兒聲明或分開聲明
    "object-property-newline": 1, // ??? 強制將對象的屬性放在不一樣的行上
    "object-curly-spacing": [2, 'always'], // 強制在花括號中使用一致的空格
    "object-curly-newline": [1, { // ??? 對象屬性換行
      multiline: true,
    }], //
    "no-whitespace-before-property": 2, // 禁止屬性前有空白
    "no-unneeded-ternary": 2, // 禁止能夠表達爲更簡單結構的三元操做符
    "semi-spacing": 2, // 強制分號先後有空格
    "semi-style": 2, // 分號風格
    "space-before-blocks": [2, 'always'], // 禁止語句塊以前的空格
    "space-before-function-paren": [2, 'never'], // 禁止函數圓括號以前有一個空格
    "space-in-parens": 2, // 禁止或強制圓括號內的空格
    "space-infix-ops": 2, // 要求中綴操做符周圍有空格
    "space-unary-ops": 2, // 禁止在一元操做符以前或以後存在空格
    "spaced-comment": 2, // 要求在註釋前有空白
    "switch-colon-spacing": 2, // 強制在 switch 的冒號左右有空格
    "template-tag-spacing": 2, // 要求在模板標記和它們的字面量之間有空格
    /**
     * ES6相關規則
     */
    "arrow-parens": [2, 'as-needed'], // 要求箭頭函數的參數使用圓括號
    "arrow-body-style": 2, // 要求箭頭函數體使用大括號
    "arrow-spacing": 2, // 要求箭頭函數的箭頭以前或以後有空格
    "generator-star-spacing": 2, // ??? 強制 generator 函數中 * 號周圍有空格
    "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": 0, // 禁止 Symbol 操做符和 new 一塊兒使用lines-between
    "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": 1, // ??? 建議使用const
    "prefer-destructuring": [2, { // 優先使用數組和對象解構
      "array": false,
      "object": true
    }],
    "prefer-rest-params": 2, // 使用剩餘參數代替 arguments
    "prefer-spread": 2, // 建議使用擴展運算符而非.apply()
    "prefer-template": 2, // 建議使用模板而非字符串鏈接
    "require-yield": 2, // 禁用函數內沒有yield的 generator 函數
    "rest-spread-spacing": 2, // 強制剩餘和擴展運算符及其表達式之間有空格
    "template-curly-spacing": 2, // 強制模板字符串中空格的使用
    "sort-imports": [0, { // ??? import 排序 問題是要以字母排序
      ignoreCase: true,
      ignoreMemberSort: true,
      memberSyntaxSortOrder: ['all', 'single', 'multiple', 'none']
    }], //
  }
};
相關文章
相關標籤/搜索