你何时不应该使用收缩膜包装?锁定NPM生成的文件?

时间:2017-11-01 16:17:08

标签: node.js npm

最近的NPM版本已经开始自动生成package-lock.json个文件,这使得团队中的所有开发人员都可以轻松地制作可重现的版本。以前,必须手动指示NPM生成npm-shrinkwrap.json文件,因此现在自动生成它会更加方便。

但是当应该使用这些文件时会出现什么情况?我对NPM上发布的the view of a package maintainer开源软件特别感兴趣。

这是我到目前为止所提出的:

未发布的软件:任何

(只住在回购中)

在生成一些内部未发布软件的团队中,您可以选择使用您喜欢的任何锁定文件。两者都会使发展更顺畅。

已发布的软件:取决于

(到像npmjs.org这样的注册表)

应用程序:shrinkwrap

如果您正在开发守护程序或CLI应用程序,请使用shrinkwrap文件发送它。 package-lock.json不会发布,因为它不会与NPM包一起发布。

图书馆:什么都没有?

不要创建一个shrinkwrap文件,参考npm-shrinkwrap.json is discouraged for libraries

  

npm-shrinkwrap.json的推荐用例是通过注册表上的发布过程部署的应用程序:例如,用作全局安装或devDependencies的守护程序和命令行工具。强烈建议图书馆作者不要发布此文件,因为这会阻止最终用户控制传递依赖关系更新。

1 个答案:

答案 0 :(得分:1)

文档的确如此。 package-lock.json适用于应用程序。库应该依赖于package.json,并在声明的边界内使用所有版本的依赖项。

package-lock.json的目的很简单 - 在解析后将依赖关系锁定到确切的版本。它仅在应用程序级别上才有意义,因为应用程序不应该是其他任何东西的依赖项。

相比之下,库不是应用程序,并且预计会有依赖于它们的应用程序。库支持的自身依赖项的版本越多,不可解析的版本与其他库冲突的可能性就越小。所以package-lock.json与库应该具有的完全相反。