PNPM 相容性資料庫
Yarn 和 PNPM 都支援稱為相容性資料庫的功能,這是一個公開的 package.json
修復資料庫。這些修復解決了 NPM 套件的官方維護人員可能不願意解決的已知問題。(最佳實務是避免使用這類套件,但通常這是不切實際的。) 相容性資料庫修復類似於在 .pnpmfile.cjs
中找到的使用者撰寫規則。它們是使用 @yarnpkg/extensions 套件維護的。
PNPM 的功能保護小型專案免受常見的陷阱,但這種方法對於大型單一儲存庫有一些缺點
- 隱藏的魔法:這些修復會捆綁到 PNPM 二進位檔中。當嘗試協調複雜的跨專案版本相依性時,讓主要輸入位於沒有 Git 差異、甚至無法在 GitHub 網站上檢視的檔案中,是很彆扭的。
- 不必要的耦合:不同版本的
@yarnpkg/extensions
規則會捆綁到不同的 PNPM 版本中。這可能會在升級或降級套件管理員時導致鎖定檔變動。 - 最後套用:修復是在
.pnpmfile.cjs
之後套用的。這表示修復後的版本對於使用者自己的轉換或記錄是不可見的,而且.pnpmfile.cjs
不再是版本選擇的最終權威。
為了避免這些問題,rush install
和 rush 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 追蹤檔案中。