モノリポ構成
モノリポを使用している場合は、これらのドキュメントは型付きのリンティングを設定する方法を理解するのに役立ちます。型付きのリンティングを使用しない場合は、ここで停止できます。特別なことは何もする必要はありません。
使用するセットアップに応じて、構成は異なるように見えます
ルートの tsconfig.json
が 1 つ
tsconfig.json
ファイルが 1 つしかなく、その include
パスが、リンティングするすべてのファイルを含んでいる場合は、追加の構成なしで typescript-eslint で直接使用できます。
include
パスが、リンティングするすべてのファイルをすべて含めることができない場合は、次のような新しい構成を作成することをお勧めします
{
// 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",
],
}
この新しい TSConfig を参照するように ESLint 設定ファイルを必ず更新してください。
パッケージあたり tsconfig.json
が 1 つ (およびルートにオプションで 1 つ)
型情報を使ったリンティング で導入された parserOptions.project
オプションは、相対パスの配列を受け付けます。パスは Node グロブ として提供できます。リンティングされるファイルごとに、最初に一致するプロジェクトパスがそのバッキング TSConfig として使用されます。
- フラット構成
- 従来の構成
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,
},
},
},
);
/* 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
の幅広いグローブ
parserOptions.project
で幅広いグローブ**
を使用すると、リンティングのパフォーマンスが低下する可能性があります。**
を使用してすべてのフォルダーを再帰的にチェックするグローブではなく、一度に1つの*
を使用するパスを指定することをお勧めします。
- フラット構成
- 従来の構成
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,
},
},
},
);
/* 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,
};
詳細については パーサーのオプション「プロジェクト」のグローブパターンがリンティングの速度を低下させる を参照してください。
大規模な(> 10)マルチパッケージモノレポに関する重要な注意事項
かなり大規模で、または相互依存性の高いプロジェクトの場合、この方法を使用するとOOMが発生する可能性があるという報告があります。OOMが発生することはほとんどないため、設定して最初にテストすることをお勧めします。
詳細と議論については #1192 を参照してください。
OOMが発生した場合は、上記の問題にコメントして、リポジトリについてお知らせください。情報が多いほど、より良い解決策が見つかります。暫定的な回避策としては、次のいずれかを検討してください。
- 1つのroot
tsconfig.eslint.json
に切り替える(1つのroottsconfig.json
を参照) - シェルスクリプトを使用して、上記の既存の構成を使用して一度に1つのパッケージをリンティングする。
トラブルシューティング
この作業がうまくいかない場合は、 トラブルシューティングFAQ を参照してください。