如何稳定{Node} npm依赖系统?
我正在使用angular-cli并使用Angular2构build一个SPA。 我有一个Jenkins构build系统,在我的应用程序中,每当我的项目存储库发生变化时,都会触发一个基本上删除整个node_modules文件夹的构build,然后执行npm install ,然后执行构build过程。 所有这些都是在Linux机器上远程完成的。
问题:
现在我面临的问题是二级和三级依赖问题。 大多数依赖(如果不是全部)我使用npm安装有自己的packagae.json文件,这反过来有自己的,等等。 所以,即使我通过删除插入符号或波形符号来冻结我的主package.json文件中的版本,我也无法控制二级和三级依赖项的版本。 这导致了很多UNMET PEER DEPENDENCY错误,因为一个依赖需要同一个组件的一个版本,而另一个需要另一个版本!
题:
所以我的问题是,我如何确保这不会发生,并实现稳定的依赖安装?
你可以保持你的package.json
不变,然后运行npm shrinkwrap
,它会创build一个新的文件npm-shrinkwrap.json
,并在你运行的时候安装所有包层次结构的确切版本。
如果你提交这个文件,下一次你运行npm install
,npm应该检测这个文件并且尊重它。
文档:
https://docs.npmjs.com/cli/shrinkwrap
PS
Facebook的yarn
npm客户端(类似于本地npm工具的工具)的另一个相似的工作方式是。
它使用自己的yarn.lock
文件,并且它快速地caching了它自己的共享caching中的依赖关系,使得下一个安装速度更快。
但是对于构build服务器上的用例,可能难以设置它。 这就是为什么我强调npm本身的答案。