Skip to content

配置文件解析

之前通过初始化生成一个.eslintrc.js的配置文件,这个配置文件写入的配置影响当前配置和子目录下的配置。

我们之前选用了standard配置,所以这里我们的配置文件继承自standard配置,可在node_modules/eslint-config-standard/eslintrc.json文件中找到

一般情况我们不会使用,但是要是手动或者开启关闭一些内容,还是很重要的。

js
// 因为是运行在node.js环境中,所以使用CommonJS的方式导出一个对象
// 初始有四个配置选项
module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: [
    'standard'
  ],
  parserOptions: {
    ecmaVersion: 12
  },
  rules: {
  }
}

env

JS在不同环境中有不同的API可被调用,这些API通过全局成员方式提供。在浏览器中,可以使用window,document等对象,在nodejs中,不存在这些对象。env标记了环境,eslint可以根据信息判断哪些成员是可用的

js
module.exports = {
  /**
   * 但是我们这里将browser设置为false,在js中使用alert全局成员这里就会报错,
   *
   * 注意:这里就算设置为false,在全局中使用document、navigator、window对象eslint也不会报错,是因为我们使用的standard标准,那个里面做了配置,我们可以在任何环境下使用window和document,我们可以在eslint-config-standard中看到他们在global里面的成员的document、navigator、window都设置为只读成员,而我们的配置又继承自standard的配置,所以这里没有办法影响document的使用
   */
  env: {
    browser: true,
    es2021: true
  }
}

env对应的环境极其可使用的全局变量

下面的变量不是互斥的,可以同时设置为true使用。

env环境可使用的全局变量
browser浏览器环境中的全局变量
nodeNode.js 全局变量和 Node.js 作用域
commonjsCommonJS 全局变量和 CommonJS 作用域(用于 Browserify/MebPack 打包的只在浏览器中运行的代码)。
shared-node-browserNode.js 和 Browser 通用全局变量。
es6启用除了 modules 以外的所有 ECMAScript 6 特性(该选项会自动设置 ecmaVersion 解析器选项为 6)
workerWeb Workers 全局变量。
amd将 require()和 define()定义为像 amd 一样的全同变量。
mocha添加所有的 Mocha 测试全局变量。
jasmine添加所有的 Jasmine 版本 1.3 和 2.0 的测试全局变量。
jestJest 全局变量。
phantomjsPhantomJS 全局变量。
protractorProtractor 全局变量。
qunitQUnit 全局变量。
jqueryjQuery 全局变量。
prototypejsPrototype.js 全局变量。
shelljsShellJS 全局变量。
meteorMeteor 全局变量。
mongoMongoDB 全局变量。
applescriptAppleScript 全局变量。
nashornJava & Nashorn 全局变量。
serviceworkerService Worker 全局变量。
atomtestAtom 测试全局变量。
embertestEmber 测试全局变量。
webextensionsWebExtensions 全局变量。
greasemonkeyGreaseMonkey 全局变量
js
// 02-configuration.js

extends

用来继承一些共享配置,standard是最常用的。如果在项目中想要继承一个共同的自定义配置,可以建一个配置文件,在这里引用。

js
/**
* 这个是数组,里面可以有多个值,可以同时继承多个共享配置。
*/
  extends: [
    'standard'
  ]

parserOptions

这个是关于语法解析器的配置

js
parserOptions: {
    // ecmaVersion是ECMAScript的版本,如果设置为5那么就没有办法写ES6的新特性了
    // 版本配置影响的只是语法检测,不代表某个成员是否可用,如果是ES2015提供的全局成员,例如promise还是需要env中的ES6选项进行控制
    ecmaVersion: 12
  }

error Parsing error: sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding { ecmaVersion: 2015 } to the parser options standard中将sourceType设置为module,要修改为script

error Parsing error: The keyword 'const' is reserved 当前环境不支持const,需要修改ecmaVersion

rules

校验每个ESLint中规则的开启或者关闭

下面添加个属性: 属性名是内置的规则名称,值可以是off(关闭)/warn(警告)/error(错误)

js
rules: {
    // 出现alert会报错
    "no-alert": "error"
  }

官网中有所有的可配置属性的列表,我们可以在使用的时候进行查看。一般standard开启了很多规则,基本也满足大多数需求。

globals

这个在最新的配置中已经没有了,这里可以配置我们需要的全局成员

例如:如果要在项目中全局使用jQuery,如果单独用就会报错,那么在这里设置一下,代码中就可以直接使用了。

js
// 02-configuration.js
jQuery("#123")

// .eslintrc.js
globals: {
    "jQuery": "readonly"
  }

MIT Licensed