版本

迁移到 v9.x

ESLint v9.0.0 是 ESLint 的一个主要版本,因此包含您需要了解的几个重大变更。本指南旨在引导您完成这些重大变更。

下面的列表大致按每个变更预计影响的用户数量排序,其中第一项预计会影响最多的用户。

目录

针对用户的重大变更

针对插件开发人员的重大变更

针对集成开发人员的重大变更


不再支持 Node.js < v18.18、v19

从 ESLint v9.0.0 开始,ESLint 正式停止支持这些版本的 Node.js。ESLint 现在支持以下版本的 Node.js

  • Node.js v18.18.0 及更高版本
  • Node.js v20.9.0 及更高版本
  • Node.js v21 及更高版本

解决方法:使用 ESLint v9.0.0 时,请确保您至少升级到 Node.js v18.18.0。要仔细检查的一件重要事项是,通过编辑器集成使用 ESLint 时,您的编辑器支持的 Node.js 版本。如果您无法升级,我们建议您继续使用 ESLint v8.56.0,直到您能够升级 Node.js。

相关问题(s):#17595

新的默认配置格式 (eslint.config.js)

正如我们 博客文章 中所宣布的那样,在 ESLint v9.0.0 中,eslint.config.js 是新的默认配置格式。以前的格式 eslintrc 现在已弃用,不再自动搜索。

解决方法:按照 配置迁移指南 更新您的配置以使用新格式。如果您仍然需要使用已弃用的 eslintrc 配置格式,请将环境变量 ESLINT_USE_FLAT_CONFIG 设置为 false

相关问题(s):#13481

删除了多个格式化程序

ESLint v9.0.0 已从核心删除了以下格式化程序

已删除的格式化程序 替代 npm 包
checkstyle eslint-formatter-checkstyle
compact eslint-formatter-compact
jslint-xml eslint-formatter-jslint-xml
junit eslint-formatter-junit
tap eslint-formatter-tap
unix eslint-formatter-unix
visualstudio eslint-formatter-visualstudio

解决方法:如果您通过 -f 命令行标志使用其中任何一个格式化程序,则需要安装相应格式化程序的包。

相关问题(s):#17524

删除了 require-jsdocvalid-jsdoc 规则

require-jsdocvalid-jsdoc 规则已在 ESLint v9.0.0 中删除。这些规则最初是在 2018 年弃用的。

解决方法:使用 eslint-plugin-jsdoc 中的 替代规则

相关问题(s):#15820

eslint:recommended 已更新

eslint:recommended 中已启用四条新规则

此外,以下规则已从 eslint:recommended 中删除

解决方法:修复错误或禁用这些规则。

相关问题(s):#15576, #17446, #17596

--quiet 不再运行设置为 "warn" 的规则

在 ESLint v9.0.0 之前,--quiet CLI 标志会运行所有设置为 "error""warn" 的规则,然后隐藏设置为 "warn" 的规则的结果。在 ESLint v9.0.0 中,--quiet 将阻止在设置为 "warn" 时执行规则。这可以提高包含许多设置为 "warn" 的规则的配置的性能。

如果使用了 --max-warnings,则 --quiet 不会抑制设置为 "warn" 的规则的执行,但会抑制这些规则的输出。

解决方法:在大多数情况下,此更改是透明的。但是,如果您正在运行设置为 "warn" 的规则,该规则会对可用于其他规则的数据进行更改(例如,如果规则使用 sourceCode.markVariableAsUsed()),那么这会导致行为更改。在这种情况下,您需要将规则设置为 "error" 或停止使用 --quiet

相关问题(s):#16450

--output-file 现在即使输出为空也会将文件写入磁盘

在 ESLint v9.0.0 之前,--output-file 标志在输出为空时将跳过将文件写入磁盘。然而,在 ESLint v9.0.0 中,--output-file 现在始终将文件写入磁盘,即使输出为空。此更新确保 --output-file 的行为更加一致和可靠。

解决方法:检查您对 --output-file 标志的使用,特别是如果您的流程依赖于文件是否存在,这取决于输出内容。如有必要,更新您的脚本或配置以适应此更改。

相关问题: #17660

未传递模式到 CLI 时行为变更

在 ESLint v9.0.0 之前,在不使用任何文件或目录模式的情况下运行 ESLint CLI 将导致不检查任何文件并以代码 0 退出。这令人困惑,因为不清楚实际上什么也没有发生。在 ESLint v9.0.0 中,此行为已更新

  • 扁平化配置。如果您使用扁平化配置,您可以运行 npx eslinteslint(如果已全局安装),ESLint 将假定您要检查当前目录。实际上,不传递任何模式等同于传递 .
  • eslintrc。如果您使用已弃用的 eslintrc 配置,那么在不使用任何模式的情况下运行 CLI 时,您现在将收到错误。

解决方法:在大多数情况下,无需进行任何更改,您可能会发现一些您认为 ESLint 在运行但实际上没有运行的位置。如果您想保留 v8.x 行为,即不传递任何模式导致 ESLint 以代码 0 退出,请将 --pass-on-no-patterns 标志添加到 CLI 调用中。

相关问题: #14308

仅包含严重程度的 /* eslint */ 注释现在会保留配置文件中的选项

在 ESLint v9.0.0 之前,诸如 /* eslint curly: "warn" *//* eslint curly: ["warn"] */ 之类的配置注释将完全覆盖配置文件中为该规则指定的任何配置,从而强制执行该规则的默认选项。

在 ESLint v9.0.0 中,配置注释的行为与配置文件中规则配置的合并方式一致,这意味着仅包含严重程度的配置注释现在会保留配置文件中指定的选项,并且只覆盖严重程度。

例如,如果您有以下配置文件

// eslint.config.js

export default [{
    rules: {
        curly: ["error", "multi"]
    }
}];

以及以下配置注释

// my-file.js

/* eslint curly: "warn" */

在检查 my-file.js 时,curly 规则的最终配置将是 curly: ["warn", "multi"]

请注意,此更改仅影响配置文件中使用选项配置相同规则,并且使用不带选项的配置注释的情况。在所有其他情况下(例如,该规则仅使用配置注释配置),行为与 ESLint v9.0.0 之前相同。

解决方法:我们预计在大多数情况下无需进行任何更改,因为使用配置注释配置的规则通常未在配置文件中配置。但是,如果您需要配置注释完全覆盖配置文件中的配置并强制执行默认选项,则需要至少指定一个选项

// my-file.js

/* eslint curly: ["warn", "all"] */

相关问题: #17381

现在不允许为同一个规则使用多个 /* eslint */ 注释

在 ESLint v9.0.0 之前,如果正在检查的文件包含针对同一个规则的多个 /* eslint */ 配置注释,则将应用最后一个注释,而其他注释将被静默忽略。例如

/* eslint semi: ["error", "always"] */
/* eslint semi: ["error", "never"] */

foo() // valid, because the configuration is "never"

在 ESLint v9.0.0 中,将应用第一个注释,而其他注释将被报告为 lint 错误

/* eslint semi: ["error", "always"] */
/* eslint semi: ["error", "never"] */ // error: Rule "semi" is already configured by another configuration comment in the preceding code. This configuration is ignored.

foo() // error: Missing semicolon

解决方法:删除重复的 /* eslint */ 注释。

相关问题: #18132

更加严格的 /* exported */ 解析

在 ESLint v9.0.0 之前,/* exported */ 指令错误地允许使用以下语法

/* exported foo: true, bar: false */

// and

/* exported foo bar */

此示例中的 truefalse 对 ESLint 的行为没有影响,实际上这是一个解析错误。

在 ESLint v9.0.0 中,任何 /* exported */ 变量后面跟着冒号和值都将被忽略,因为它们无效。

解决方法:更新任何 /* exported */ 指令以消除冒号和后续值,并确保变量名称之间有逗号,例如

/* exported foo, bar */

相关问题: #17622

no-constructor-returnno-sequences 规则模式更加严格

在早期版本的 ESLint 中,no-constructor-returnno-sequences 规则错误地接受了无效选项。

此问题已在 ESLint v9.0.0 中修复。

  • no-constructor-return 规则不接受任何选项。
  • no-sequences 规则可以接受一个选项,该选项是一个包含属性 "allowInParentheses"(布尔值)的对象。
{
    "rules": {
        "no-constructor-return": ["error"],
        "no-sequences": ["error", { "allowInParentheses": false }]
    }
}

解决方法:如果 ESLint 报告了这些规则的任何无效配置,请更新您的配置。

相关问题: #16879

no-implicit-coercion 中默认情况下新增检查

在 ESLint v9.0.0 中,no-implicit-coercion 规则默认情况下还会报告以下情况

-(-foo);
foo - 0;

解决方法:如果您想保留此规则的先前行为,请设置 "allow": ["-", "- -"]

{
    "rules": {
        "no-implicit-coercion": [2, { "allow": ["-", "- -"] } ],
    }
}

相关问题: #17832

no-invalid-regexp 中区分大小写的标志

在 ESLint v9.0.0 中,选项 allowConstructorFlags 现在区分大小写。

解决方法:如果需要,请更新您的配置。

相关问题: #16574

no-unused-varsvarsIgnorePattern 选项不再适用于捕获参数

在早期版本的 ESLint 中,no-unused-varsvarsIgnorePattern 选项错误地忽略了 catch 子句中指定的错误。在 ESLint v9.0.0 中,varsIgnorePattern 不再适用于 catch 子句中的错误。例如

/*eslint no-unused-vars: ["error", { "caughtErrors": "all", "varsIgnorePattern": "^err" }]*/

try {
    //...
} catch (err) { // 'err' will be reported.
    console.error("errors");
}

解决方法:如果您想为 catch 子句变量名指定忽略模式,请除了 varsIgnorePattern 之外,还使用 caughtErrorsIgnorePattern 选项。

相关问题: #17540

no-restricted-imports 现在接受具有相同 name 的多个配置条目

在早期版本的 ESLint 中,如果 no-restricted-imports 规则配置的 paths 数组中的多个条目具有相同的 name 属性,则只应用最后一个条目,而前面的条目将被忽略。

从 ESLint v9.0.0 开始,所有条目都会应用,允许为不同的导入名称指定不同的消息。例如,您现在可以像这样配置规则

{
    rules: {
        "no-restricted-imports": ["error", {
            paths: [
                {
                    name: "react-native",
                    importNames: ["Text"],
                    message: "import 'Text' from 'ui/_components' instead"
                },
                {
                    name: "react-native",
                    importNames: ["View"],
                    message: "import 'View' from 'ui/_components' instead"
                }
            ]
        }]
    }
}

import { Text } from "react-native"import { View } from "react-native" 都将被报告,并带有不同的消息。

在早期版本的 ESLint 中,使用此配置只会报告 import { View } from "react-native"

解决方法:如果此规则的配置中包含多个具有相同 name 的条目,则您可能需要删除意外的条目。

相关问题: #15261

扁平化配置中不再接受 "eslint:recommended""eslint:all"

在 ESLint v8.x 中,eslint.config.js 可以通过在配置数组中插入字符串来引用 "eslint:recommended""eslint:all" 配置,如以下示例所示

// eslint.config.js
export default [
    "eslint:recommended",
    "eslint:all"
];

在 ESLint v9.0.0 中,此格式不再受支持,并将导致错误。

解决方法:改用 @eslint/js

// eslint.config.js
import js from "@eslint/js";

export default [
    js.configs.recommended,
    js.configs.all
];

相关问题: #17488

no-inner-declarations 具有新的默认行为和新的选项

ESLint v9.0.0 在 no-inner-declarations 规则中引入了一个新的选项,名为 blockScopeFunctions,该选项默认情况下允许在严格模式下进行块级 function,前提是 languageOptions.ecmaVersion 设置为 2015 或更高版本。

/*eslint no-inner-declarations: "error"*/
"use strict";

if (test) {
    function foo () { }  // no error
}

解决方法:如果您想在任何情况下(无论是否为严格模式)都报告块级 function,请将 blockScopeFunctions 选项设置为 "disallow"

相关问题: #15576

no-unused-vars 现在默认将 caughtErrors 设置为 "all"

ESLint v9.0.0 更改了 no-unused-vars 规则的 caughtErrors 选项的默认值。以前,它默认设置为 "none",表示从不检查捕获的错误是否已使用。现在,它默认设置为 "all",表示检查捕获的错误是否已使用。

/*eslint no-unused-vars: "error"*/
try {}
catch (error) {
    // 'error' is defined but never used
}

解决方法:如果您想允许未使用捕获的错误,例如在编写将在不支持 ES2019 可选捕获绑定的环境中直接运行的代码时,请将 caughtErrors 选项设置为 "none"。否则,请删除未使用捕获的错误。

/*eslint no-unused-vars: "error"*/
try {}
catch {
    // no error
}

相关问题: #17974

no-useless-computed-key 默认情况下会标记类中不必要的计算成员名称

在 ESLint v9.0.0 中,no-useless-computed-key 规则的 enforceForClassMembers 选项的默认值已从 false 更改为 true。此更改的效果是,默认情况下会标记类中不必要的计算成员名称。

/*eslint no-useless-computed-key: "error"*/

class SomeClass {
    ["someMethod"]() {} // ok in ESLint v8, error in ESLint v9.
}

解决方法:修复规则报告的问题,或者通过将 enforceForClassMembers 选项设置为 false 来恢复到之前的行为。

相关问题: #18042

camelcase 允许选项只接受字符串数组

以前,camelcase 规则不会强制执行 allow 选项为字符串数组。在 ESLint v9.0.0 中,allow 选项现在只接受字符串数组。

解决方法:如果 ESLint 报告了此规则的无效配置,请更新您的配置。

相关问题: #18232

删除了多个 context 方法

ESLint v9.0.0 从 context 对象中删除了多个已弃用的方法,并将它们移到了 SourceCode 对象上

context 中删除 SourceCode 上的替换
context.getSource() sourceCode.getText()
context.getSourceLines() sourceCode.getLines()
context.getAllComments() sourceCode.getAllComments()
context.getNodeByRangeIndex() sourceCode.getNodeByRangeIndex()
context.getComments() sourceCode.getCommentsBefore(), sourceCode.getCommentsAfter(), sourceCode.getCommentsInside()
context.getCommentsBefore() sourceCode.getCommentsBefore()
context.getCommentsAfter() sourceCode.getCommentsAfter()
context.getCommentsInside() sourceCode.getCommentsInside()
context.getJSDocComment() sourceCode.getJSDocComment()
context.getFirstToken() sourceCode.getFirstToken()
context.getFirstTokens() sourceCode.getFirstTokens()
context.getLastToken() sourceCode.getLastToken()
context.getLastTokens() sourceCode.getLastTokens()
context.getTokenAfter() sourceCode.getTokenAfter()
context.getTokenBefore() sourceCode.getTokenBefore()
context.getTokenByRangeStart() sourceCode.getTokenByRangeStart()
context.getTokens() sourceCode.getTokens()
context.getTokensAfter() sourceCode.getTokensAfter()
context.getTokensBefore() sourceCode.getTokensBefore()
context.getTokensBetween() sourceCode.getTokensBetween()
context.parserServices sourceCode.parserServices
context.getDeclaredVariables() sourceCode.getDeclaredVariables()

除了上表中的方法外,还有一些其他方法也进行了迁移,但需要不同的方法签名

context 中删除 SourceCode 上的替换
context.getAncestors() sourceCode.getAncestors(node)
context.getScope() sourceCode.getScope(node)
context.markVariableAsUsed(name) sourceCode.markVariableAsUsed(name, node)

解决方法: 使用博客文章中推荐的自动升级工具,博客文章

相关问题: #16999, #13481

删除了 sourceCode.getComments()

ESLint v9.0.0 删除了已弃用的 sourceCode.getComments() 方法。

解决方法: 使用 sourceCode.getCommentsBefore()sourceCode.getCommentsAfter()sourceCode.getCommentsInside() 替代。

相关问题: #14744

删除了 CodePath#currentSegments

ESLint v9.0.0 删除了已弃用的 CodePath#currentSegments 属性。

解决方法: 按照博客文章中的建议更新您的代码,博客文章

相关问题: #17457

代码路径现在是预先计算的

在 ESLint v9.0.0 之前,代码路径是在规则使用的相同 AST 遍历期间计算的,这意味着传递给 onCodePathStartonCodePathSegmentStart 等方法的信息是不完整的。具体来说,像 CodePath#childCodePathsCodePathSegment#nextSegments 这样的数组属性从空开始,然后随着遍历完成而填充了相应的信息,这意味着这些数组在检查其值时可能具有不同的元素。

ESLint v9.0.0 现在在规则使用的遍历之前预先计算代码路径信息。因此,无论在规则内部访问代码路径信息的位置如何,它现在都已完成。

解决方法: 如果您访问 CodePathCodePathSegment 上的任何数组属性,则需要更新您的代码。具体来说

  • 如果您正在检查任何数组属性的 length,请确保您使用相对比较运算符(如 <><=>=)而不是等号。
  • 如果您正在访问 CodePathSegment 上的 nextSegmentsprevSegmentsallNextSegmentsallPrevSegments 属性,或 CodePath#childCodePaths,请验证您的代码是否仍按预期工作。为了向后兼容,请考虑将检查这些属性的逻辑移至 onCodePathEnd

相关问题: #16999

不再支持函数式规则

ESLint v9.0.0 不再支持函数式规则。函数式规则是通过导出函数而不是具有 create() 方法的对象来创建的规则。这种规则格式已于 2016 年弃用。

解决方法: 将您的规则更新为 最新的规则格式。对于用 CommonJS 编写的规则,您也可以使用 eslint-transforms

eslint-plugin/prefer-object-rule 规则可以帮助强制使用对象式规则,并自动修复任何剩余的函数式规则,eslint-plugin/prefer-object-rule

相关问题: #14709

对于具有选项的规则,meta.schema 是必需的

从 ESLint v9.0.0 开始,如果对没有指定 meta.schema 属性的规则传递了任何选项,则会抛出错误。 传递

解决方法

  • 如果您的规则需要 选项,请将 meta.schema 属性设置为规则选项的 JSON Schema 格式描述。ESLint 将使用此模式来验证配置的选项,并防止对您的规则进行无效或意外的输入。
  • 如果您的规则不需要任何选项,则无需采取任何措施。此更改可确保最终用户不会错误地为不需要选项的规则配置选项。
  • (不建议) 您也可以将 meta.schema 设置为 false 来禁用此验证,但强烈建议您在规则需要选项时提供模式,并在规则不需要选项时省略模式(或设置为 []),以便 ESLint 可以确保用户配置的有效性。

eslint-plugin/require-meta-schema 规则可以帮助强制在需要时规则具有模式。 eslint-plugin/require-meta-schema

相关问题: #14709

FlatRuleTester 现在是 RuleTester

正如我们在 博客文章 中宣布的那样,临时 FlatRuleTester 类已重命名为 RuleTester,而 v8.x 中的 RuleTester 类已被删除。此外,来自 eslint/use-at-your-own-riskFlatRuleTester 导出已被删除。

解决方法: 更新您的规则测试以使用新的 RuleTester。为此,以下是一些您需要进行的常见更改

  • 注意 ecmaVersionsourceType 的新默认值。 默认情况下,RuleTester 使用扁平化配置的默认值 ecmaVersion: "latest"sourceType: "module"。如果它们期望旧的默认值 ecmaVersion: 5sourceType: "script",这可能会导致某些测试失败。如果您想使用旧的默认值,则需要像这样在您的 RuleTester 中手动指定它

    // use eslintrc defaults
    const ruleTester = new RuleTester({
        languageOptions: {
            ecmaVersion: 5,
            sourceType: "script"
        }
    });
    
  • parserOptions 更改为 languageOptions 如果您在测试中设置 ecmaVersionsourceType,请将它们从 parserOptions 移至 languageOptions,如下所示

    ruleTester.run("my-rule", myRule, {
        valid: [
            {
                code: "foo",
                parserOptions: {
                    ecmaVersion: 6
                }
            }
        ]
    });
    
    // becomes
    
    ruleTester.run("my-rule", myRule, {
        valid: [
            {
                code: "foo",
                languageOptions: {
                    ecmaVersion: 6
                }
            }
        ]
    });
    
  • 翻译其他配置键。 以前在 eslintrc 配置系统上运行的键(如 envparser)必须翻译成扁平化配置系统。有关翻译您可能正在使用的其他键的详细信息,请参阅 配置迁移指南

相关问题(s):#13481

严格的 RuleTester 检查

为了帮助开发高质量的自定义规则,这些规则没有常见的错误,ESLint v9.0.0 对 RuleTester 实施了一些更改

  1. 测试用例 output 必须与 code 不同。 在 ESLint v8.x 中,如果 outputcode 相同,它会断言没有自动修复。当查看测试用例时,并不总是立即清楚 output 是否与 code 不同,尤其是当字符串很长或多行时,这使得开发人员难以确定测试用例是否期望自动修复。在 ESLint v9.0.0 中,为了避免这种歧义,RuleTester 现在在测试 output 与测试 code 具有相同值时抛出错误。因此,现在指定 output 必须意味着测试用例期望自动修复并断言其结果。如果测试用例不期望自动修复,请省略 output 属性或将其设置为 null。这会断言没有自动修复。
  2. 测试错误对象必须指定 messagemessageId 为了提高测试覆盖率的质量,RuleTester 现在在测试错误对象中没有指定 messagemessageId 时抛出错误。
  3. 测试错误对象必须在实际错误提供建议时指定 suggestions 在 ESLint v8.x 中,如果从测试错误对象中省略了 suggestions 属性,RuleTester 不会执行任何与建议相关的检查,因此很容易忘记断言测试用例是否会产生建议。在 ESLint v9.0.0 中,省略 suggestions 属性会断言实际错误不会提供建议,而如果实际错误确实提供建议,则需要指定 suggestions 属性。我们强烈建议您通过指定测试建议对象的数组来详细测试建议,但您也可以指定 suggestions: <number> 来断言建议的数量。
  4. 测试建议对象必须指定 output 为了提高测试覆盖率的质量,RuleTester 现在在测试建议对象中未指定 output 属性时抛出错误。
  5. 测试建议对象必须指定 descmessageId 为了提高测试覆盖率的质量,RuleTester 现在在测试建议对象中没有指定 descmessageId 属性时抛出错误。也不允许同时指定两者。如果除了 messageId 之外您还希望断言建议描述文本,那么请添加 data 属性。
  6. 建议消息必须是唯一的。 因为建议通常在编辑器中以下拉列表的形式显示,所以对于同一个 lint 问题,两个建议不应该有相同的消息。否则,就无法知道任何给定建议将做什么。此额外的检查会自动运行。
  7. 建议必须更改代码。 预计建议通过更改代码来修复报告的问题。RuleTester 现在在建议测试 output 与测试 code 相同时抛出错误。
  8. 建议必须生成有效的语法。 为了使规则建议有用,它们需要是有效的语法。RuleTester 现在使用与 code 值相同的语言选项解析建议的输出,并在解析失败时抛出错误。
  9. 测试用例必须是唯一的。 相同的测试用例会导致混淆,并且在长测试文件中很难手动检测。重复项现在会自动检测到,并且可以安全地删除。
  10. filenameonly 必须是预期的类型。 RuleTester 现在检查测试对象 filenameonly 属性的类型。如果指定,filename 必须是字符串值。如果指定,only 必须是布尔值。
  11. 消息不能包含未替换的占位符。 RuleTester 现在还会检查消息中是否仍然存在 {{ placeholder }},因为它们的值没有通过各自 context.report() 调用中的 data 传递。

解决方法: 使用 RuleTester 运行您的规则测试,并修复出现的任何错误。您需要进行的更改以满足 RuleTester 与 ESLint v8.x 兼容。

相关问题: #15104#15735#16908#18016

FlatESLint 现在是 ESLint

正如我们 博客文章 中所宣布的那样,临时 FlatESLint 类已重命名为 ESLint,而 v8.x 中的 ESLint 类已重命名为 LegacyESLint

解决方法: 如果您当前正在使用 ESLint 类,请验证您的测试是否使用新的 ESLint 类通过。并非所有旧选项都受支持,因此您可能需要更新传递给构造函数的参数。有关详细信息,请参阅 Node.js API 参考

如果您仍然需要 v8.x ESLint 功能,请像这样使用 LegacyESLint

const { LegacyESLint } = require("eslint/use-at-your-own-risk");

相关问题(s):#13481

Linter 现在期望使用扁平化配置格式

在 ESLint v9.0.0 中,传递给 Linter#verify()Linter#verifyAndFix() 方法的 config 参数应使用扁平化配置格式。

此外,方法 Linter#defineRule()Linter#defineRules()Linter#defineParser()Linter#getRules() 已不再可用。

解决方法: 如果您正在使用 Linter 类,请验证您的测试是否通过。

如果您正在传递与扁平化配置格式不兼容的配置对象,则需要更新代码。

// eslintrc config format
linter.verify(code, {
    parserOptions: {
        ecmaVersion: 6
    }
});

// flat config format
linter.verify(code, {
    languageOptions: {
        ecmaVersion: 6
    }
});

有关翻译您可能正在使用的其他键的详细信息,请参阅 配置迁移指南

规则和解析器可以直接在配置中定义。

// eslintrc mode
linter.defineRule("my-rule1", myRule1);
linter.defineRules({
    "my-rule2": myRule2,
    "my-rule3": myRule3
});
linter.defineParser("my-parser", myParser);
linter.verify(code, {
    rules: {
        "my-rule1": "error",
        "my-rule2": "error",
        "my-rule3": "error"
    },
    parser: "my-parser"
});

// flat config mode
linter.verify(code, {
    plugins: {
        "my-plugin-foo": {
            rules: {
                "my-rule1": myRule1
            }
        },
        "my-plugin-bar": {
            rules: {
                "my-rule2": myRule2,
                "my-rule3": myRule3
            }
        }
    },
    rules: {
        "my-plugin-foo/my-rule1": "error",
        "my-plugin-bar/my-rule2": "error",
        "my-plugin-bar/my-rule3": "error"
    },
    languageOptions: {
        parser: myParser
    }
});

如果您仍然需要 v8.x Linter 功能,请像这样将 configType: "eslintrc" 传递给构造函数

const linter = new Linter({ configType: "eslintrc" });

linter.verify(code, {
    parserOptions: {
        ecmaVersion: 6
    }
});

linter.getRules();

相关问题(s):#13481

更改语言