如何稳定{Node} npm依赖系统?

时间:2016-12-23 07:02:08

标签: node.js angular angular-cli npm-install package.json

我正在使用angular-cli并使用Angular2构建SPA。我的应用程序有一个Jenkins构建系统,每次我的项目存储库发生更改时,都会触发构建,基本上会删除整个 node_modules 文件夹,然后执行 npm install 接下来是我的构建过程。所有这些都是在Linux机器上远程完成的。

问题:
现在我面临的问题是二级和三级依赖关系。我使用npm安装的大多数依赖项(如果不是全部)都有自己的 packagae.json 文件,而这些文件又有自己的,依此类推。等等。因此,即使我通过删除插入符号或波形符号来冻结主 package.json 文件中的版本,我也无法控制二级和三级依赖项的版本。这导致了很多 UNMET PEER DEPENDENCY 错误,因为一个依赖项需要同一个组件的一个版本而另一个需要另一个版本!

问题:
所以我的问题是,如何确保不会发生这种情况并实现稳定的依赖安装?

1 个答案:

答案 0 :(得分:2)

您可以按原样保留package.json并运行npm shrinkwrap,这将创建一个新文件npm-shrinkwrap.json,其中包含您运行时所有软件包层次结构的确切版本。< / p>

如果您提交此文件,则下次运行npm install时,npm应检测该文件并尊重该文件。

文档:
https://docs.npmjs.com/cli/shrinkwrap

<强> P.S。

其他类似的选项是Facebook的yarn npm客户端(类似于本地npm工具的工具)。

它使用自己的yarn.lock文件,并且速度更快,因为它在自己的共享缓存中缓存依赖项,使下一次安装速度更快。

但是对于构建服务器上的用例,可能更难设置它。这就是为什么我强调npm本身的答案。