单仓库配置
如果您使用的是单仓库,这些文档将帮助您了解如何设置类型化代码检查。如果您不想使用类型化代码检查,那么您可以在此停止 - 您无需执行任何特殊操作。
配置将根据您使用的设置而有所不同
一个根目录 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,
},
},
},
);
.eslintrc.js
/* eslint-env node */
module.exports = {
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended-type-checked',
],
parser: '@typescript-eslint/parser',
parserOptions: {
project: true,
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
tsconfigRootDir: import.meta.dirname,
},
plugins: ['@typescript-eslint'],
root: true,
};
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,
},
},
},
);
.eslintrc.js
/* eslint-env node */
module.exports = {
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-type-checked',
],
parser: '@typescript-eslint/parser',
parserOptions: {
project: ['./tsconfig.eslint.json', './**/tsconfig.json'],
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
tsconfigRootDir: __dirname,
},
plugins: ['@typescript-eslint'],
root: true,
};
有关更多详细信息,请参阅 解析器选项“project”中的 Glob 模式会减慢 lint 速度。
关于大型(> 10)多包 monorepo 的重要说明
我们收到报告称,对于足够大或相互依赖的项目,您可能会使用这种方法遇到 OOM。我们的建议是先设置并测试,因为只有很少的案例会触发此 OOM。
有关更多信息和讨论,请参阅 #1192。
如果您确实遇到了 OOM,请在上述问题中发表评论并告知我们您的仓库 - 我们拥有的信息越多越好。作为临时解决方法,请考虑以下方法之一
- 切换到一个根目录
tsconfig.eslint.json
(请参阅 一个根目录tsconfig.json
) - 使用 shell 脚本一次只 lint 一个包,使用您上面现有的配置。
故障排除
如果您在使用过程中遇到问题,请查看我们的 故障排除常见问题解答。