让前端飞

认识Eslint以及项目常见的.eslintrc.js配置

2019-04-29  本文已影响0人  Danile_1226

什么是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
  }
}
上一篇下一篇

猜你喜欢

热点阅读