配置语言选项
JavaScript 生态系统有各种各样的运行时、版本、扩展和框架。这些每个都可能具有不同的支持语法和全局变量。ESLint 允许您配置特定于项目中使用的 JavaScript 的语言选项,例如自定义全局变量。您还可以使用插件来扩展 ESLint 以支持您项目的语言选项。
指定 JavaScript 选项
ESLint 允许您指定您想要支持的 JavaScript 语言选项。默认情况下,ESLint 期望最新的 stage 4 ECMAScript 语法和 ECMAScript 模块 (ESM) 模式。您可以使用 languageOptions
键并指定以下一个或多个属性来覆盖这些设置
ecmaVersion
(默认值:"latest"
) - 指示要 lint 的代码的 ECMAScript 版本,确定语法和可用的全局变量。对于 ECMAScript 3 和 5,分别设置为3
或5
。否则,您可以使用2015
到现在的任何年份。在大多数情况下,我们建议使用默认值"latest"
以确保您始终使用最新的 ECMAScript 版本。sourceType
(默认值:"module"
) - 指示正在使用的 JavaScript 文件的模式。可能的值有module
- ESM 模块(当ecmaVersion
为3
或5
时无效)。您的代码具有模块作用域,并在严格模式下运行。commonjs
- CommonJS 模块(如果您的代码使用require()
,则很有用)。您的代码具有顶层函数作用域,并在非严格模式下运行。script
- 非模块。您的代码具有共享的全局作用域,并在非严格模式下运行。
这是一个示例 配置文件,您可以在 lint ECMAScript 5 代码时使用
// eslint.config.js
import { defineConfig } from "eslint/config";
export default defineConfig([
{
languageOptions: {
ecmaVersion: 5,
sourceType: "script"
}
}
]);
指定解析器选项
如果您正在使用内置的 ESLint 解析器,您还可以通过指定 languageOptions.parserOptions
键来更改 ESLint 解释代码的方式。所有选项默认为 false
allowReserved
- 允许使用保留字作为标识符(如果ecmaVersion
为3
)。ecmaFeatures
- 一个对象,指示您想要使用的其他语言功能
这是一个示例 配置文件,它在默认解析器中启用 JSX 解析
// eslint.config.js
import { defineConfig } from "eslint/config";
export default defineConfig([
{
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
import { defineConfig } from "eslint/config";
export default defineConfig([
{
languageOptions: {
globals: {
var1: "writable",
var2: "readonly"
}
}
}
]);
此配置允许在您的代码中覆盖 var1
,但禁止覆盖 var2
。
可以通过将其值设置为 "off"
来禁用全局变量。例如,在大多数全局变量都可用但 Promise
不可用的环境中,您可以使用此配置
// eslint.config.js
import { defineConfig } from "eslint/config";
export default defineConfig([
{
languageOptions: {
globals: {
Promise: "off"
}
}
}
]);
预定义的全局变量
除了 ECMAScript 标准内置的全局变量(根据配置的 languageOptions.ecmaVersion
自动启用)之外,ESLint 不提供预定义的全局变量集。您可以使用 globals
包来额外启用特定环境的所有全局变量。例如,以下是如何将 console
以及其他浏览器全局变量添加到您的配置中。
// eslint.config.js
import globals from "globals";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
languageOptions: {
globals: {
...globals.browser
}
}
}
]);
您可以采用相同的方式包含多个不同的全局变量集合。以下示例包含 Web 浏览器和 Jest 的全局变量
// eslint.config.js
import globals from "globals";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
languageOptions: {
globals: {
...globals.browser,
...globals.jest
}
}
}
]);