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