认识Eslint以及项目常见的.eslintrc.js配置
什么是eslintrc
ESLint旨在完全可配置,这意味着你可以关闭每个规则并仅使用基本语法验证运行,或混合并匹配捆绑规则和自定义规则
,以使ESLint完美适合您的项目。配置ESLint有两种主要方法:
配置注释
- 使用JavaScript注释将配置信息直接嵌入到文件中。
配置文件
- 使用JavaScript,JSON或YAML文件指定整个目录(主目录除外)及其所有子目录的配置信息。
配置文件格式
ESLint支持多种格式的配置文件:
JavaScript
- 使用.eslintrc.js和导出包含您的配置的对象。
YAML
- 使用.eslintrc.yaml或.eslintrc.yml定义配置结构。
JSON
- 用于.eslintrc.json定义配置结构。ESLint的JSON文件也允许JavaScript样式的注释。
不推荐使用
- 使用.eslintrc,可以是JSON或YAML。
package.json
- eslintConfig在您的package.json文件中创建一个属性并在那里定义您的配置。
如果同一目录中有多个配置文件,则ESLint将只使用一个。优先顺序
是:
1.eslintrc.js
2.eslintrc.yaml
3.eslintrc.yml
4.eslintrc.json
5.eslintrc
6.package.json
配置级联和层次结构
假设您具有以下结构:
your-project
├── .eslintrc
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc
└── test.js
配置级联的工作方式是使用
最接近.eslintrc文件
的文件作为最高优先级,然后使用父目录中的任何配置文件,依此类推。
1⃣️lib/所有文件,将使用.eslintrc项目根目录
中的文件作为其配置
2⃣️tests/目录,.eslintrc其目录层次结构中的两个文件的组合来绘制,其中最接近的文件具有优先权。
通过这种方式,您可以拥有项目级ESLint设置,并且还具有特定于目录的覆盖。
假设您具有以下结构:
your-project
├── package.json
├── lib
│ └── source.js
└─┬ tests
├── .eslintrc
└── test.js
如果在同一目录中找到了一个.eslintrc和一个package.json文件,.eslintrc将优先使用,并且package.json不会使用该文件。
假设您具有以下结构:
home
└── user
├── .eslintrc <- Always skipped if other configs present
└── projectA
├── .eslintrc <- Not used
└── lib
├── .eslintrc <- { "root": true }
└── main.js
默认情况下,ESLint将在根目录下的所有父文件夹中查找配置文件。
要将ESLint限制为特定项目,请将其"root": true
放在文件eslintConfig字段内package.json或.eslintrc.*项目根级别的文件中。一旦找到配置,ESLint将停止查找父文件夹"root": true。
项目中常用的配置
下面这些rules是用来设置从插件来的规范代码的规则,使用必须去掉前缀eslint-plugin-主要有如下的设置规则,可以设置字符串也可以设置数字,两者效果一致
"off" -> 0 关闭规则
"warn" -> 1 开启警告规则
"error" -> 2 开启错误规则
// http://eslint.org/docs/user-guide/configuring
module.exports = {
//此项是用来告诉eslint找当前配置文件不能往父级查找
root: true,
//此项是用来指定eslint解析器的,解析器必须符合规则,babel-eslint解析器是对babel解析器的包装使其与ESLint解析
parser: 'babel-eslint',
//此项是用来指定javaScript语言类型和风格,sourceType用来指定js导入的方式,默认是script,此处设置为module,指某块导入方式
parserOptions: {
// 设置 script(默认) 或 module,如果代码是在ECMASCRIPT中的模块
sourceType: 'module',
"ecmaVersion": 6,
},
// 此项指定环境的全局变量,下面的配置指定为浏览器环境
env: {
browser: true,
},
// 此项是用来配置标准的js风格,就是说写代码的时候要规范的写,如果你使用vs-code我觉得应该可以避免出错
extends: 'airbnb-base',
// 此项是用来提供插件的,插件名称省略了eslint-plugin-,下面这个配置是用来规范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', { // 对文件扩展名的验证
'js': 'never',
'vue': 'never'
}],
// allow optionalDependencies
'import/no-extraneous-dependencies': ['error', {
'optionalDependencies': ['test/unit/index.js']
}],
'no-unused-expressions': ["error", { // 禁止无用的表达式
"allowTernary": true,
"allowShortCircuit": true
}],
'no-bitwise': ["error", { //不允许使用位运算符
"allow": ["~"]
}],
'import/prefer-default-export': 0,// 关闭-使用default export
'import/newline-after-import': 0, // 关闭-在import中新起一行
'no-param-reassign': 0, //关闭-不允许重新分配函数参数"no-proto
'no-plusplus': 0, //关闭-不允许使用++ --运算符
'linebreak-style': 0,
'max-len': 0, //关闭-一行最大长度,单位为字符
'no-nested-ternary': 0, //关闭-不允许使用嵌套的三目运算符
'camelcase': 0, // 不强制驼峰命名规则
// allow debugger & console during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'no-console': process.env.NODE_ENV === 'production' ? 2 : 0
}
}