什么是eslintrc
ESLint旨在完全可配置阁猜,這意味著你可以關(guān)閉每個規(guī)則并僅使用基本語法驗(yàn)證運(yùn)行颗味,或混合并匹配捆綁規(guī)則和自定義規(guī)則
脖律,以使ESLint完美適合您的項(xiàng)目。配置ESLint有兩種主要方法:
配置注釋
- 使用JavaScript注釋將配置信息直接嵌入到文件中蟀俊。
配置文件
- 使用JavaScript钦铺,JSON或YAML文件指定整個目錄(主目錄除外)及其所有子目錄的配置信息。
配置文件格式
ESLint支持多種格式的配置文件:
JavaScript
- 使用.eslintrc.js和導(dǎo)出包含您的配置的對象肢预。
YAML
- 使用.eslintrc.yaml或.eslintrc.yml定義配置結(jié)構(gòu)矛洞。
JSON
- 用于.eslintrc.json定義配置結(jié)構(gòu)。ESLint的JSON文件也允許JavaScript樣式的注釋烫映。
不推薦使用
- 使用.eslintrc沼本,可以是JSON或YAML。
package.json
- eslintConfig在您的package.json文件中創(chuàng)建一個屬性并在那里定義您的配置锭沟。
如果同一目錄中有多個配置文件抽兆,則ESLint將只使用一個。優(yōu)先順序
是:
1.eslintrc.js
2.eslintrc.yaml
3.eslintrc.yml
4.eslintrc.json
5.eslintrc
6.package.json
配置級聯(lián)和層次結(jié)構(gòu)
假設(shè)您具有以下結(jié)構(gòu):
your-project
├── .eslintrc
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc
└── test.js
配置級聯(lián)的工作方式是使用
最接近.eslintrc文件
的文件作為最高優(yōu)先級族淮,然后使用父目錄中的任何配置文件辫红,依此類推凭涂。
1??lib/所有文件,將使用.eslintrc項(xiàng)目根目錄
中的文件作為其配置
2??tests/目錄厉熟,.eslintrc其目錄層次結(jié)構(gòu)中的兩個文件的組合來繪制导盅,其中最接近的文件具有優(yōu)先權(quán)。
通過這種方式揍瑟,您可以擁有項(xiàng)目級ESLint設(shè)置白翻,并且還具有特定于目錄的覆蓋。
假設(shè)您具有以下結(jié)構(gòu):
your-project
├── package.json
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc
└── test.js
如果在同一目錄中找到了一個.eslintrc和一個package.json文件绢片,.eslintrc將優(yōu)先使用滤馍,并且package.json不會使用該文件。
假設(shè)您具有以下結(jié)構(gòu):
home
└── user
├── .eslintrc <- Always skipped if other configs present
└── projectA
├── .eslintrc <- Not used
└── lib
├── .eslintrc <- { "root": true }
└── main.js
默認(rèn)情況下底循,ESLint將在根目錄下的所有父文件夾中查找配置文件巢株。
要將ESLint限制為特定項(xiàng)目,請將其"root": true
放在文件eslintConfig字段內(nèi)package.json或.eslintrc.*項(xiàng)目根級別的文件中熙涤。一旦找到配置阁苞,ESLint將停止查找父文件夾"root": true。
項(xiàng)目中常用的配置
下面這些rules是用來設(shè)置從插件來的規(guī)范代碼的規(guī)則祠挫,使用必須去掉前綴eslint-plugin-主要有如下的設(shè)置規(guī)則那槽,可以設(shè)置字符串也可以設(shè)置數(shù)字,兩者效果一致
"off" -> 0 關(guān)閉規(guī)則
"warn" -> 1 開啟警告規(guī)則
"error" -> 2 開啟錯誤規(guī)則
// http://eslint.org/docs/user-guide/configuring
module.exports = {
//此項(xiàng)是用來告訴eslint找當(dāng)前配置文件不能往父級查找
root: true,
//此項(xiàng)是用來指定eslint解析器的等舔,解析器必須符合規(guī)則骚灸,babel-eslint解析器是對babel解析器的包裝使其與ESLint解析
parser: 'babel-eslint',
//此項(xiàng)是用來指定javaScript語言類型和風(fēng)格,sourceType用來指定js導(dǎo)入的方式慌植,默認(rèn)是script甚牲,此處設(shè)置為module,指某塊導(dǎo)入方式
parserOptions: {
// 設(shè)置 script(默認(rèn)) 或 module蝶柿,如果代碼是在ECMASCRIPT中的模塊
sourceType: 'module'丈钙,
"ecmaVersion": 6,
},
// 此項(xiàng)指定環(huán)境的全局變量,下面的配置指定為瀏覽器環(huán)境
env: {
browser: true,
},
// 此項(xiàng)是用來配置標(biāo)準(zhǔn)的js風(fēng)格交汤,就是說寫代碼的時候要規(guī)范的寫著恩,如果你使用vs-code我覺得應(yīng)該可以避免出錯
extends: 'airbnb-base',
// 此項(xiàng)是用來提供插件的,插件名稱省略了eslint-plugin-蜻展,下面這個配置是用來規(guī)范html的
// required to lint *.vue files
plugins: [
'html'
],
// check if imports actually resolve
'settings': {
'import/resolver': {
'webpack': {
'config': 'build/webpack.base.conf.js'
}
}
},
// add your custom rules here
'rules': {
// don't require .vue extension when importing
'import/extensions': ['error', 'always', { // 對文件擴(kuò)展名的驗(yàn)證
'js': 'never',
'vue': 'never'
}],
// allow optionalDependencies
'import/no-extraneous-dependencies': ['error', {
'optionalDependencies': ['test/unit/index.js']
}],
'no-unused-expressions': ["error", { // 禁止無用的表達(dá)式
"allowTernary": true,
"allowShortCircuit": true
}],
'no-bitwise': ["error", { //不允許使用位運(yùn)算符
"allow": ["~"]
}],
'import/prefer-default-export': 0,// 關(guān)閉-使用default export
'import/newline-after-import': 0, // 關(guān)閉-在import中新起一行
'no-param-reassign': 0, //關(guān)閉-不允許重新分配函數(shù)參數(shù)"no-proto
'no-plusplus': 0, //關(guān)閉-不允許使用++ --運(yùn)算符
'linebreak-style': 0,
'max-len': 0, //關(guān)閉-一行最大長度,單位為字符
'no-nested-ternary': 0, //關(guān)閉-不允許使用嵌套的三目運(yùn)算符
'camelcase': 0, // 不強(qiáng)制駝峰命名規(guī)則
// allow debugger & console during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'no-console': process.env.NODE_ENV === 'production' ? 2 : 0
}
}