Rush Stack商店部落格活動
跳至主要內容

PNPM 相容性資料庫

Yarn 和 PNPM 都支援稱為相容性資料庫的功能,這是一個公開的 package.json 修復資料庫。這些修復解決了 NPM 套件的官方維護人員可能不願意解決的已知問題。(最佳實務是避免使用這類套件,但通常這是不切實際的。) 相容性資料庫修復類似於在 .pnpmfile.cjs 中找到的使用者撰寫規則。它們是使用 @yarnpkg/extensions 套件維護的。

PNPM 的功能保護小型專案免受常見的陷阱,但這種方法對於大型單一儲存庫有一些缺點

  • 隱藏的魔法:這些修復會捆綁到 PNPM 二進位檔中。當嘗試協調複雜的跨專案版本相依性時,讓主要輸入位於沒有 Git 差異、甚至無法在 GitHub 網站上檢視的檔案中,是很彆扭的。
  • 不必要的耦合:不同版本的 @yarnpkg/extensions 規則會捆綁到不同的 PNPM 版本中。這可能會在升級或降級套件管理員時導致鎖定檔變動。
  • 最後套用:修復是在 .pnpmfile.cjs 之後套用的。這表示修復後的版本對於使用者自己的轉換或記錄是不可見的,而且 .pnpmfile.cjs 不再是版本選擇的最終權威。

為了避免這些問題,rush installrush update 在叫用 PNPM 時總是會停用相容性資料庫功能。

詳細資訊

  • PNPM 版本 >= 6.32.12>= 7.0.1 (但不是 7.0.0) 實作了相容性資料庫
  • ignore-compatibility-db 切換是在較新的 PNPM 版本中實作的:>= 6.34.0 <7.0.01>= 7.9.0
  • Rush 版本 >= 5.76.0 如果可能的話,會停用相容性資料庫...
  • ..否則,如果缺少切換,Rush 會列印警告,建議升級 PNPM

相容性資料庫修復非常有用。若要在您的 Rush 儲存庫中套用它們,建議將這些設定複製到適當的 Git 追蹤檔案中,例如 .pnpmfile.cjs

💡 功能想法:建議一種自動機制,將 @yarnpkg/extensions 同步到 common/config/rush 下的 Git 追蹤檔案中。