使用 NX 和 Angular 对可发布库进行对等依赖配置

Pat*_*ato 12 npm npm-publish angular ng-packagr nrwl

我有一个使用 NX 和 Angular 的 monorepo,我正在向 NPM 发布一些库,我有以下场景

\n
apps\n   only_App\nlibs\n   lib_A // v1.0.0\n   lib_B // v1.0.0\n   lib_C // v1.0.0\n
Run Code Online (Sandbox Code Playgroud)\n

lib_A 依赖于 lib_B 和 lib_C。

\n

预构建的package.json中lib_A没有\xe2\x80\x99t 有任何peerDependency并且在我构建它之前发布它之后,自动添加对等依赖项,例如

\n
// BUILT lib_A/package.json\n\n{\n...,\n"peerDependencies":{\n   "@myScope/lib-b": "1.0.0", //specifically that version\n   "@myScope/lib-c": "1.0.0",\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

问题是当我lib_A在另一个项目中发布并使用它时(在 NX 和此存储库之外)。它总是期望我使用lib_Bv1.0.0 lib_C \n如果我打补丁lib_B将其升级到v1.0.1,那么我也被迫重建lib_A更新peerDependency版本。也发布lib_A和升级lib_A版本。

\n

有没有办法可以配置它,以便在构建时lib_A将其添加^到我的库中?IE

\n
// BUILT lib_A/package.json\n\n{\n...,\n"peerDependencies":{\n   "@myScope/lib-b": "^1.0.0", //automatically includes the ^ (caret)\n   "@myScope/lib-c": "^1.0.0",\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果我在 lib_B 中有一个小补丁,就允许我以这种方式更新 lib_B 而不是 lib_A。

\n

到目前为止,唯一的 \xe2\x80\x9csolution\xe2\x80\x9d 是手动将构建的package.json 中生成的对等依赖项复制并粘贴到预构建的package.json中并手动添加^,但我知道这是不可扩展

\n

Oli*_*r.B -3

在文件中添加"buildableProjectDepsInPackageJsonType": "dependencies"构建目标project.json

https://nx.dev/packages/js/executors/tsc#buildableprojectdepsinpackagejsontype

  • 这可能是不可取的——peerDependency 和 dependency 在语义上是不同的。将其设置为“依赖项”将会给项目安装安装多个目标依赖项副本的库带来风险,这可能会导致许多需要单例的问题。 (2认同)