跳至主要内容

单仓库配置

如果您使用的是单仓库,这些文档将帮助您了解如何设置类型化代码检查。如果您不想使用类型化代码检查,那么您可以在此停止 - 您无需执行任何特殊操作。

配置将根据您使用的设置而有所不同

  1. 一个根 tsconfig.json
  2. 每个包一个 tsconfig.json(根目录中可选一个)

一个根目录 tsconfig.json

如果您只有一个 tsconfig.json 文件,并且它的 include 路径包含您想要 lint 的所有文件,您可以直接使用它与 typescript-eslint,无需进一步配置。

如果它的 include 路径无法包含所有要 lint 的文件,我们建议创建一个名为 tsconfig.eslint.json 的新配置,它看起来像这样

tsconfig.eslint.json
{
// extend your base config to share compilerOptions, etc
"extends": "./tsconfig.json",
"compilerOptions": {
// ensure that nobody can accidentally use this config for a build
"noEmit": true,
},
"include": [
// whatever paths you intend to lint
"src",
"test",
"tools",
],
}

确保更新您的 ESLint 配置文件以指向此新的 TSConfig。

每个包一个 tsconfig.json(根目录中可选一个)

使用类型信息进行 Lint 中引入的 parserOptions.project 选项接受一个相对路径数组。路径可以作为 Node glob 提供。对于每个要 lint 的文件,第一个匹配的项目路径将用作其支持的 TSConfig。

eslint.config.js
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: {
project: true,
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
tsconfigRootDir: import.meta.dirname,
},
},
},
);

parserOptions.project 中的宽泛 glob

parserOptions.project 中使用宽泛 glob ** 可能会降低 lint 性能。与使用 ** 递归检查所有文件夹的 glob 相比,更倾向于使用一次只使用一个 * 的路径。

eslint.config.js
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: {
project: ['./tsconfig.eslint.json', './**/tsconfig.json'],
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
tsconfigRootDir: import.meta.dirname,
},
},
},
);

有关更多详细信息,请参阅 解析器选项“project”中的 Glob 模式会减慢 lint 速度

关于大型(> 10)多包 monorepo 的重要说明

我们收到报告称,对于足够大或相互依赖的项目,您可能会使用这种方法遇到 OOM。我们的建议是先设置并测试,因为只有很少的案例会触发此 OOM。

有关更多信息和讨论,请参阅 #1192

如果您确实遇到了 OOM,请在上述问题中发表评论并告知我们您的仓库 - 我们拥有的信息越多越好。作为临时解决方法,请考虑以下方法之一

  • 切换到一个根目录 tsconfig.eslint.json(请参阅 一个根目录 tsconfig.json
  • 使用 shell 脚本一次只 lint 一个包,使用您上面现有的配置。

故障排除

如果您在使用过程中遇到问题,请查看我们的 故障排除常见问题解答