10

我们公司有一些 Web 应用程序,它们又依赖于很长的内部创建和托管的 npm 包链(我们使用 JFrog Artifactory),每个包都有自己的依赖项(等等)。每当修复错误或在低级包中实现功能时,当前流程都需要开发人员检查他们的更改,等待 CICD 构建完成并运行测试,更新父包,然后冲洗/重复所有上链的方式(这可能是一个很长的过程)。

这不可能是一个独特的情况,但它极大地影响了我们的生产力,并鼓励单体包开发来限制要更新的包数量,而不是适当的代码分离。

我只能想到两个解决方案:

1) 更新 web 应用程序以直接在 package.json 中使用传递依赖。然而,这破坏了“封装”,因为 Web 应用程序不应该知道直接依赖项如何管理其工作。如果直接依赖关系稍后要使用其他传递依赖关系,则不应让 Web 应用程序引用现在不相关的包。

2) 修改 web 应用程序的 package-lock.json 以指向新版本的传递依赖。然而,这似乎只是暂时起作用,因为合并冲突或直接依赖项的新安装往往会恢复这些更改。

我意识到答案可能是优化构建/发布过程以减少痛苦和手动,但我希望其他人可能会遇到不同的解决方案。

仅供参考 - 默认情况下,所有依赖项都以 '~' 作为版本前缀安装。

4

1 回答 1

0

执行此操作的正确方法(请记住,此功能是最近在 npm 8.x 中引入的)是使用该overrides部分。引入的这个新功能允许将依赖关系树中的包替换为另一个版本,或者完全替换为另一个包。

于 2022-02-19T22:46:59.290 回答