メインコンテンツへスキップ

モノリポ構成

モノリポを使用している場合は、これらのドキュメントは型付きのリンティングを設定する方法を理解するのに役立ちます。型付きのリンティングを使用しない場合は、ここで停止できます。特別なことは何もする必要はありません。

使用するセットアップに応じて、構成は異なるように見えます

  1. ルートの tsconfig.json が 1 つ
  2. パッケージあたり tsconfig.json が 1 つ (およびルートにオプションで 1 つ)

ルートの tsconfig.json が 1 つ

tsconfig.json ファイルが 1 つしかなく、その include パスが、リンティングするすべてのファイルを含んでいる場合は、追加の構成なしで typescript-eslint で直接使用できます。

include パスが、リンティングするすべてのファイルをすべて含めることができない場合は、次のような新しい構成を作成することをお勧めします

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",
],
}

この新しい TSConfig を参照するように ESLint 設定ファイルを必ず更新してください。

パッケージあたり tsconfig.json が 1 つ (およびルートにオプションで 1 つ)

型情報を使ったリンティング で導入された parserOptions.project オプションは、相対パスの配列を受け付けます。パスは Node グロブ として提供できます。リンティングされるファイルごとに、最初に一致するプロジェクトパスがそのバッキング 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 の幅広いグローブ

parserOptions.project で幅広いグローブ**を使用すると、リンティングのパフォーマンスが低下する可能性があります。**を使用してすべてのフォルダーを再帰的にチェックするグローブではなく、一度に1つの*を使用するパスを指定することをお勧めします。

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,
},
},
},
);

詳細については パーサーのオプション「プロジェクト」のグローブパターンがリンティングの速度を低下させる を参照してください。

大規模な(> 10)マルチパッケージモノレポに関する重要な注意事項

かなり大規模で、または相互依存性の高いプロジェクトの場合、この方法を使用するとOOMが発生する可能性があるという報告があります。OOMが発生することはほとんどないため、設定して最初にテストすることをお勧めします。

詳細と議論については #1192 を参照してください。

OOMが発生した場合は、上記の問題にコメントして、リポジトリについてお知らせください。情報が多いほど、より良い解決策が見つかります。暫定的な回避策としては、次のいずれかを検討してください。

  • 1つのroot tsconfig.eslint.json に切り替える(1つのroot tsconfig.json を参照)
  • シェルスクリプトを使用して、上記の既存の構成を使用して一度に1つのパッケージをリンティングする。

トラブルシューティング

この作業がうまくいかない場合は、 トラブルシューティングFAQ を参照してください。