JS包应该有收缩包装吗?

时间:2017-03-09 00:04:13

标签: npm package-managers npm-shrinkwrap dependency-resolution

我知道使用npm shrinkwrap有助于锁定依赖项,以帮助保证应用程序的可复制构建。

我的问题是,如果您正在构建模块而不是应用程序,该怎么办?该模块的每个版本是否应包含npm-shrinkwrap.json?我已经看了一些开源模块,并且没有在他们的存储库中看到它们(例如:expressreactchai,{{3} })。

我的理解是npm(> = 3)通过合并兼容版本提供的好处。例如,如果pkg-a依赖于lodash ^4.0.0而pkg-b依赖于lodash ^4.3.5,那么它只会安装最新lodash 4版本的单个副本。但是如果pkg-a和pkg-b都创建了shrinkwraps,那么很可能它们不会与完全相同的lodash版本相对应,并且需要安装两个库的副本,即使它们是完全兼容的版本

不包括shrinkwrap的缺点是库作者正在构建一个将被其他应用程序依赖的包,并且当它的任何依赖关系(或依赖关系,依赖关系,递归)时,它可能随时被破坏在次要版本或修补程序版本中发布重大更改。在依赖关系破坏的情况下,图书馆作者除了发布收缩包装外没有什么可以做的。

例如,如果我的库依赖于async,这取决于request,并且hawk在修补程序版本中发布了重大更改,那么即使锁定到确切版本的请求也会赢得&#39 ;修复我的库 - 修复我的库的唯一方法(据我所知)是发布一个削减鹰的确切版本的收缩包装。

这是啰嗦,但我试图了解是否有更好的理由让Node模块收缩,而不是利用npm提供的优势而不是使用它们。

0 个答案:

没有答案