版本

配置语言选项(已弃用)

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

指定环境

环境提供了预定义的全局变量。可用的环境有

  • browser - 浏览器全局变量。
  • node - Node.js 全局变量和 Node.js 作用域。
  • commonjs - CommonJS 全局变量和 CommonJS 作用域(用于仅浏览器端的使用 Browserify/WebPack 的代码)。
  • shared-node-browser - Node.js 和浏览器共有的全局变量。
  • es6 - 启用所有 ECMAScript 6 功能,模块除外(这会自动将 ecmaVersion 解析器选项设置为 6)。
  • es2016 - 添加所有 ECMAScript 2016 全局变量,并自动将 ecmaVersion 解析器选项设置为 7。
  • es2017 - 添加所有 ECMAScript 2017 全局变量,并自动将 ecmaVersion 解析器选项设置为 8。
  • es2018 - 添加所有 ECMAScript 2018 全局变量,并自动将 ecmaVersion 解析器选项设置为 9。
  • es2019 - 添加所有 ECMAScript 2019 全局变量,并自动将 ecmaVersion 解析器选项设置为 10。
  • es2020 - 添加所有 ECMAScript 2020 全局变量,并自动将 ecmaVersion 解析器选项设置为 11。
  • es2021 - 添加所有 ECMAScript 2021 全局变量,并自动将 ecmaVersion 解析器选项设置为 12。
  • es2022 - 添加所有 ECMAScript 2022 全局变量,并自动将 ecmaVersion 解析器选项设置为 13。
  • es2023 - 添加所有 ECMAScript 2023 全局变量,并自动将 ecmaVersion 解析器选项设置为 14。
  • es2024 - 添加所有 ECMAScript 2024 全局变量,并自动将 ecmaVersion 解析器选项设置为 15。
  • worker - Web Worker 全局变量。
  • amd - 根据 amd 规范,将 require()define() 定义为全局变量。
  • mocha - 添加所有 Mocha 测试全局变量。
  • jasmine - 添加版本 1.3 和 2.0 的所有 Jasmine 测试全局变量。
  • jest - Jest 全局变量。
  • phantomjs - PhantomJS 全局变量。
  • protractor - Protractor 全局变量。
  • qunit - QUnit 全局变量。
  • jquery - jQuery 全局变量。
  • prototypejs - Prototype.js 全局变量。
  • shelljs - ShellJS 全局变量。
  • meteor - Meteor 全局变量。
  • mongo - MongoDB 全局变量。
  • applescript - AppleScript 全局变量。
  • nashorn - Java 8 Nashorn 全局变量。
  • serviceworker - Service Worker 全局变量。
  • atomtest - Atom 测试助手全局变量。
  • embertest - Ember 测试助手全局变量。
  • webextensions - WebExtensions 全局变量。
  • greasemonkey - GreaseMonkey 全局变量。

这些环境不是互斥的,所以您可以一次定义多个。

环境可以在文件中、配置文件中或使用 --env 命令行 标志来指定。

使用配置注释

要在 JavaScript 文件中使用注释指定环境,请使用以下格式

/* eslint-env node, mocha */

这将启用 Node.js 和 Mocha 环境。

使用配置文件

要在配置文件中指定环境,请使用 env 键。通过将每个环境设置为 true 来指定您想要启用的环境。例如,以下配置启用了浏览器和 Node.js 环境

{
    "env": {
        "browser": true,
        "node": true
    }
}

或在 package.json 文件中

{
    "name": "mypackage",
    "version": "0.0.1",
    "eslintConfig": {
        "env": {
            "browser": true,
            "node": true
        }
    }
}

以及在 YAML 中

---
  env:
    browser: true
    node: true

使用插件

如果您想使用来自插件的环境,请确保在 plugins 数组中指定插件名称,然后使用不带前缀的插件名称,后跟一个斜杠,再后跟环境名称。例如

{
    "plugins": ["example"],
    "env": {
        "example/custom": true
    }
}

或在 package.json 文件中

{
    "name": "mypackage",
    "version": "0.0.1",
    "eslintConfig": {
        "plugins": ["example"],
        "env": {
            "example/custom": true
        }
    }
}

指定全局变量

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

使用配置注释

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

/* global var1, var2 */

这定义了两个全局变量,var1var2。如果您想选择性地指定这些全局变量可以被写入(而不仅仅是读取),那么您可以为每个变量设置一个 "writable" 标志

/* global var1:writable, var2:writable */

使用配置文件

要在配置文件中配置全局变量,请将 globals 配置属性设置为一个对象,其中包含以您要使用的每个全局变量命名的键。对于每个全局变量键,将对应的值设置为 "writable" 以允许变量被覆盖,或设置为 "readonly" 以禁止覆盖。例如

{
    "globals": {
        "var1": "writable",
        "var2": "readonly"
    }
}

以及在 YAML 中

---
  globals:
    var1: writable
    var2: readonly

这些示例允许在您的代码中覆盖 var1,但不允许覆盖 var2

可以通过将其值设置为 "off" 来禁用全局变量。例如,在大多数 ES2015 全局变量都可用但 Promise 不可用的环境中,您可以使用此配置

{
    "env": {
        "es6": true
    },
    "globals": {
        "Promise": "off"
    }
}

由于历史原因,布尔值 false 和字符串值 "readable" 等同于 "readonly"。同样,布尔值 true 和字符串值 "writeable" 等同于 "writable"。但是,不建议使用这些旧值。

指定解析器选项

ESLint 允许您指定您想要支持的 JavaScript 语言选项。默认情况下,ESLint 期望 ECMAScript 5 语法。您可以覆盖该设置,以使用解析器选项启用对其他 ECMAScript 版本和 JSX 的支持。

请注意,支持 JSX 语法与支持 React 不同。React 将特定的语义应用于 ESLint 无法识别的 JSX 语法。如果您正在使用 React,我们建议使用 eslint-plugin-react

同样,支持 ES6 语法与支持新的 ES6 全局变量(例如,Set 等新类型)不同。对于 ES6 语法,请使用 { "parserOptions": { "ecmaVersion": 6 } };对于新的 ES6 全局变量,请使用 { "env": { "es6": true } }。设置 { "env": { "es6": true } } 会自动启用 ES6 语法,但 { "parserOptions": { "ecmaVersion": 6 } } 不会自动启用 ES6 全局变量。总之,要仅支持 ES6 语法,请使用 { "parserOptions": { "ecmaVersion": 6 } },要同时支持 ES6 语法和新的 ES6 全局变量(例如 Set 等),请使用 { "env": { "es6": true } }

解析器选项在您的 .eslintrc.* 文件中使用 parserOptions 属性进行设置。可用的选项有

  • ecmaVersion - 设置为 3、5(默认)、6、7、8、9、10、11、12、13、14、15 或 16 以指定您想要使用的 ECMAScript 语法版本。您也可以将其设置为 2015(与 6 相同)、2016(与 7 相同)、2017(与 8 相同)、2018(与 9 相同)、2019(与 10 相同)、2020(与 11 相同)、2021(与 12 相同)、2022(与 13 相同)、2023(与 14 相同)、2024(与 15 相同)或 2025(与 16 相同)以使用基于年份的命名。您还可以设置为 "latest" 以使用最新支持的版本。
  • sourceType - 如果您的代码是 ECMAScript 模块,则设置为 "script"(默认)或 "module"
  • allowReserved - 允许将保留字用作标识符(如果 ecmaVersion 为 3)。
  • ecmaFeatures - 一个对象,指示您想要使用的其他语言特性
    • globalReturn - 允许在全局作用域中使用 return 语句
    • impliedStrict - 启用全局 严格模式(如果 ecmaVersion 为 5 或更高版本)
    • jsx - 启用 JSX

这是一个 .eslintrc.json 文件的示例

{
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        "ecmaFeatures": {
            "jsx": true
        }
    },
    "rules": {
        "semi": "error"
    }
}

设置解析器选项有助于 ESLint 确定什么是解析错误。默认情况下,所有语言选项均为 false

更改语言