版本

配置语言选项

JavaScript 生态系统拥有各种运行时环境、版本、扩展和框架。这些中的每一个都可能具有不同的受支持语法和全局变量。ESLint 允许您配置特定于项目中使用的 JavaScript 的语言选项,例如自定义全局变量。您还可以使用插件来扩展 ESLint 以支持项目的语言选项。

指定 JavaScript 选项

ESLint 允许您指定要支持的 JavaScript 语言选项。默认情况下,ESLint 期望最新的第 4 阶段 ECMAScript 语法和 ECMAScript 模块 (ESM) 模式。您可以通过使用 languageOptions 键并指定以下一个或多个属性来覆盖这些设置

  • ecmaVersion(默认值:"latest") - 指示正在检测的代码的 ECMAScript 版本,确定语法和可用的全局变量。对于 ECMAScript 3 和 5,分别设置为 35。否则,您可以使用 2015 到现在的任何年份。在大多数情况下,我们建议使用默认值 "latest" 以确保您始终使用最新的 ECMAScript 版本。
  • sourceType(默认值:"module") - 指示正在使用的 JavaScript 文件的模式。可能的值为
    • module - ESM 模块(当 ecmaVersion35 时无效)。您的代码具有模块作用域,并在严格模式下运行。
    • commonjs - CommonJS 模块(如果您的代码使用 require() 则很有用)。您的代码具有顶级函数作用域,并在非严格模式下运行。
    • script - 非模块。您的代码具有共享的全局作用域,并在非严格模式下运行。

以下是一个示例 配置文件,您可能在检测 ECMAScript 5 代码时使用它

// eslint.config.js
export default [
    {
        languageOptions: {
            ecmaVersion: 5,
            sourceType: "script"
        }
    }
];

指定解析器选项

如果您使用的是内置的 ESLint 解析器,则还可以通过指定 languageOptions.parserOptions 键来更改 ESLint 解释代码的方式。所有选项默认为 false

  • allowReserved - 允许使用保留字作为标识符(如果 ecmaVersion3)。
  • ecmaFeatures - 一个对象,指示您要使用的其他语言功能
    • globalReturn - 允许在全局作用域中使用 return 语句
    • impliedStrict - 启用全局 严格模式(如果 ecmaVersion5 或更高版本)
    • jsx - 启用 JSX

以下是一个示例 配置文件,它在默认解析器中启用 JSX 解析

// eslint.config.js
export default [
    {
        languageOptions: {
            parserOptions: {
                ecmaFeatures: {
                    jsx: true
                }
            }
        }
    }
];

指定全局变量

ESLint 的一些核心规则依赖于对代码在运行时可用的全局变量的了解。由于这些变量在不同的环境之间可能差异很大,并且可以在运行时修改,因此 ESLint 对执行环境中存在哪些全局变量不做任何假设。如果您想使用需要了解哪些全局变量可用的规则,则可以在配置文件中定义全局变量,或在源代码中使用配置注释。

使用配置注释

要在 JavaScript 文件中使用注释指定全局变量,请使用以下格式

/* global var1, var2 */

这定义了两个全局变量 var1var2。如果您想选择性地指定这些全局变量可以写入(而不是仅读取),那么您可以为每个变量设置 "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
            }
        }
    }
];
更改语言