跳至主要內容

單一儲存庫組態

如果你使用單一儲存庫,這些文件將協助你找出如何設定類型化程式碼檢查。如果你不想使用類型化程式碼檢查,你可以到此為止,不需要做任何其他特殊設定。

組態會根據你使用的設定而有所不同

  1. 一個根目錄的 tsconfig.json
  2. 每個套件一個 tsconfig.json(還有一個選用的位於根目錄者)

一個根目錄的 tsconfig.json

如果你只有一個 tsconfig.json 檔案include 路徑包含你想要檢查的所有檔案,你就可以直接在 typescript-eslint 中使用它,而不需要做進一步的設定。

如果其include路徑無法包含所有要進行程式碼規範檢查之檔案,建議你建立一個名為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(根目錄中可選擇新增一個)

使用類型資訊進行程式碼規範檢查中引入的parserOptions.project選項接受一個相對路徑陣列。路徑可以提供為Node globs。對於每個經過程式碼規範檢查的檔案,第一個符合專案路徑會被使用為其後盾 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 **可能會降低程式碼規範檢查效能。與其使用**遞迴檢查所有資料夾的 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,
},
},
},
);

請參閱分析器選項 "專案" 中的 Glob 模式導致程式碼規範檢查速度變慢,以取得更多詳細資訊。

關於大型 (> 10) 多套件 monorepo 的重要注意事項

我們收到了回報,對於大型且/或互相依賴的專案,你可能會使用此方式遇到 OOM。我們的建議是先設定並測試,因為會觸發此 OOM 的情況非常少見。

請參閱#1192,以取得更多資訊和討論。

如果你確實遇到 OOM,請在此議題中留言並讓我們知道你的存放庫,資訊越多越好。作為暫時解決方法,可以考量下列選項之一

  • 切換成一個根目錄tsconfig.eslint.json(請參閱一個根目錄tsconfig.json
  • 使用 shell 指令碼一次只對一個套件進行程式碼規範檢查,並使用上方現有的設定檔。

疑難排解

如果你在讓此功能正常運作時遇到問題,請查看我們的疑難排解常見問答