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 跟踪文件的机制。