
ESLint v9.0.0 的发布带来了 新配置系统 的推出,以及 规则 API 的一系列更改。这些更改是必要的,以便为 ESLint 实施 语言插件 做好准备,这将使 ESLint 能够原生 lint 除 JavaScript 之外的其他语言。因此,插件作者需要更新其规则以与 v9.0.0 配合使用,但不幸的是,这意味着您依赖的某些插件可能尚未更新。这就是我们发布兼容性实用程序的原因。
如何知道兼容性实用程序是否会有所帮助
如果您在运行 ESLint 时遇到以下任何错误,这些实用程序可能会有所帮助
TypeError: context.getScope is not a function
TypeError: context.getAncestors is not a function
TypeError: context.markVariableAsUsed is not a function
TypeError: context.getDeclaredVariables is not a function
这些错误意味着插件规则尚未更新到最新的 ESLint 规则 API。
使用兼容性实用程序
首先,使用 npm 或任何兼容 npm 的 CLI 安装 @eslint/compat
包
npm install @eslint/compat -D
# or
yarn add @eslint/compat -D
# or
pnpm install @eslint/compat -D
# or
bun install @eslint/compat -D
然后,在您的 eslint.config.js
文件中使用 fixupPluginRules()
函数将插件包装在兼容性层中
// eslint.config.js
import { fixupPluginRules } from "@eslint/compat";
import example from "eslint-plugin-example";
export default [
{
plugins: {
example: fixupPluginRules(example)
}
},
// other config
];
之后,插件应按预期工作。
修复导入的配置
如果您从另一个引用插件的包中导入平面样式配置,则可以使用 fixupConfigRules()
函数来包装找到的所有插件,如下所示
// eslint.config.js
import { fixupConfigRules } from "@eslint/compat";
import recommended from "eslint-plugin-example/configs/recommended.js";
export default [
...fixupConfigRules(recommended)
// other config
];
fixupConfigRules()
函数接受单个对象和对象数组,以便轻松更新您正在使用的任何配置。
与 FlatCompat
一起使用
如果您正在使用 @eslint/eslintrc
包中的 FlatCompat
,您可能无法访问 eslintrc 样式配置中引用的每个插件。在这种情况下,您可以像本例中一样使用 fixupConfigRules()
函数来包装所有插件
// eslint.config.js
import { fixupConfigRules } from "@eslint/compat";
import { FlatCompat } from "@eslint/eslintrc";
const flatCompat = new FlatCompat();
export default [
...fixupConfigRules(
flatCompat.extends("my-config")
)
// other config
];
虽然此示例显示了如何将 fixupConfigRules()
与 extends()
方法一起使用,但 FlatCompat
上的任何方法都有效。
结论
新配置系统的优势之一是,它使我们能够修补尚未由其维护者更新的插件和配置。我们知道迁移到 ESLint v9.0.0 并且您的配置无法工作可能会令人沮丧,这就是为什么我们致力于提供像 @eslint/eslintrc
和 @eslint/compat
这样的包来帮助过渡。