# 语言选项
# 指定环境
环境提供预定义的全局变量。可用的环境有:
- 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。
- worker- 网络工作者全局变量。
- amd- 根据- amd规范将- require()和- define()定义为全局变量。
- mocha- 添加所有 Mocha 测试全局变量。
- jasmine- 为版本 1.3 和 2.0 添加所有 Jasmine 测试全局变量。
- jest- Jest 全局变量。
- phantomjs- PhantomJS 全局变量。
- 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 */
这定义了两个全局变量,var1 和 var2。如果您想选择性地指定这些全局变量可以被写入(而不仅仅是被读取),那么您可以为每个变量设置一个 "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 并且想要 React 语义,我们建议使用 eslint-plugin-react。同样,支持 ES6 语法与支持新的 ES6 全局变量(例如,Set 等新类型)是不同的。对于 ES6 语法,使用 { "parserOptions": { "ecmaVersion": 6 } };对于新的 ES6 全局变量,使用 { "env": { "es6": true } }。{ "env": { "es6": true } } 自动启用 ES6 语法,但 { "parserOptions": { "ecmaVersion": 6 } } 不会自动启用 ES6 全局。
使用 parserOptions 属性在 .eslintrc.* 文件中设置解析器选项。可用的选项有:
- ecmaVersion- 设置为 3、5(默认)、6、7、8、9、10、11、12、13 或 14 以指定要使用的 ECMAScript 语法版本。还可以设置为2015(同6)、2016(同7)、2017(同8)、2018(同9)、2019(同10)、2020(同11)、2021(同as 12)、2022(与 13 相同)或 2023(与 14 相同)使用基于年份的命名。您还可以将 "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。
