配置语言选项
JavaScript 生态系统拥有各种运行时环境、版本、扩展和框架。这些中的每一个都可能具有不同的受支持语法和全局变量。ESLint 允许您配置特定于项目中使用的 JavaScript 的语言选项,例如自定义全局变量。您还可以使用插件来扩展 ESLint 以支持项目的语言选项。
指定 JavaScript 选项
ESLint 允许您指定要支持的 JavaScript 语言选项。默认情况下,ESLint 期望最新的第 4 阶段 ECMAScript 语法和 ECMAScript 模块 (ESM) 模式。您可以通过使用 languageOptions
键并指定以下一个或多个属性来覆盖这些设置
ecmaVersion
(默认值:"latest"
) - 指示正在检测的代码的 ECMAScript 版本,确定语法和可用的全局变量。对于 ECMAScript 3 和 5,分别设置为3
或5
。否则,您可以使用2015
到现在的任何年份。在大多数情况下,我们建议使用默认值"latest"
以确保您始终使用最新的 ECMAScript 版本。sourceType
(默认值:"module"
) - 指示正在使用的 JavaScript 文件的模式。可能的值为module
- ESM 模块(当ecmaVersion
为3
或5
时无效)。您的代码具有模块作用域,并在严格模式下运行。commonjs
- CommonJS 模块(如果您的代码使用require()
则很有用)。您的代码具有顶级函数作用域,并在非严格模式下运行。script
- 非模块。您的代码具有共享的全局作用域,并在非严格模式下运行。
以下是一个示例 配置文件,您可能在检测 ECMAScript 5 代码时使用它
// eslint.config.js
export default [
{
languageOptions: {
ecmaVersion: 5,
sourceType: "script"
}
}
];
指定解析器选项
如果您使用的是内置的 ESLint 解析器,则还可以通过指定 languageOptions.parserOptions
键来更改 ESLint 解释代码的方式。所有选项默认为 false
allowReserved
- 允许使用保留字作为标识符(如果ecmaVersion
为3
)。ecmaFeatures
- 一个对象,指示您要使用的其他语言功能
以下是一个示例 配置文件,它在默认解析器中启用 JSX 解析
// eslint.config.js
export default [
{
languageOptions: {
parserOptions: {
ecmaFeatures: {
jsx: true
}
}
}
}
];
指定全局变量
ESLint 的一些核心规则依赖于对代码在运行时可用的全局变量的了解。由于这些变量在不同的环境之间可能差异很大,并且可以在运行时修改,因此 ESLint 对执行环境中存在哪些全局变量不做任何假设。如果您想使用需要了解哪些全局变量可用的规则,则可以在配置文件中定义全局变量,或在源代码中使用配置注释。
使用配置注释
要在 JavaScript 文件中使用注释指定全局变量,请使用以下格式
/* global var1, var2 */
这定义了两个全局变量 var1
和 var2
。如果您想选择性地指定这些全局变量可以写入(而不是仅读取),那么您可以为每个变量设置 "writable"
标志
/* global var1:writable, var2:writable */
使用配置文件
要在 配置文件 中配置全局变量,请将 languageOptions.globals
配置属性设置为一个对象,该对象包含为要使用的每个全局变量命名的键。对于每个全局变量键,将相应的值设置为 "writable"
以允许覆盖变量,或设置为 "readonly"
以禁止覆盖。例如
// eslint.config.js
export default [
{
languageOptions: {
globals: {
var1: "writable",
var2: "readonly"
}
}
}
];
此配置允许在代码中覆盖 var1
,但禁止覆盖 var2
。
可以通过将其值设置为 "off"
来禁用全局变量。例如,在大多数全局变量都可用但 Promise
不可用环境中,您可以使用此配置
// eslint.config.js
export default [
{
languageOptions: {
globals: {
Promise: "off"
}
}
}
];
预定义全局变量
除了基于配置的 languageOptions.ecmaVersion
自动启用的 ECMAScript 标准内置全局变量之外,ESLint 不提供预定义的全局变量集。您可以使用 globals
包来额外启用特定环境的所有全局变量。例如,以下是如何将 console
与其他浏览器全局变量添加到您的配置中。
// eslint.config.js
import globals from "globals";
export default [
{
languageOptions: {
globals: {
...globals.browser
}
}
}
];
您可以以相同的方式包含多个不同的全局变量集合。以下示例同时包含了 Web 浏览器和 Jest 的全局变量
// eslint.config.js
import globals from "globals";
export default [
{
languageOptions: {
globals: {
...globals.browser,
...globals.jest
}
}
}
];