Npm JS包是否应该有收缩包装?

Npm JS包是否应该有收缩包装?,npm,package-managers,npm-shrinkwrap,dependency-resolution,Npm,Package Managers,Npm Shrinkwrap,Dependency Resolution,我知道,使用npm shrinkwrap有助于锁定依赖项,以确保应用程序的可复制构建 我的问题是,如果您正在构建一个模块而不是一个应用程序,该怎么办?模块的每个版本是否应该包含一个npm shrinkwrap.json?我查看了一些开源模块,但在它们的存储库中没有看到它们(例如:,,) 我的理解是npm(>=3)通过整合兼容版本提供的好处。例如,如果pkg-a依赖于lodash^4.0.0,而pkg-b依赖于lodash^4.3.5,它将只安装最新lodash 4版本的一个副本。但是,如果pkg

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

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

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

不包含包覆面提取的缺点是,库作者正在构建一个包,该包将被其他应用程序所依赖,并且当它的任何依赖项(或依赖项的依赖项,递归地)在次要版本或修补程序版本中发布一个破坏性更改时,该包可能随时被破坏。在依赖项的依赖项被破坏的情况下,库作者除了发布包覆面处理外,什么也做不了

例如,如果我的库依赖于,而hawk在补丁发行版中发布了一个突破性的更改,那么即使锁定到请求的确切版本也无法修复我的库——修复库的唯一方法(据我所知)是发布一个收缩包装,缩减hawk的确切版本

这是一个冗长的问题,但我试图理解是否有更好的理由在节点模块中使用收缩包装,而不是通过不使用它们来利用npm提供的好处