最近的NPM版本已经开始自动生成package-lock.json
个文件,这使得团队中的所有开发人员都可以轻松地制作可重现的版本。以前,必须手动指示NPM生成npm-shrinkwrap.json
文件,因此现在自动生成它会更加方便。
但是当不应该使用这些文件时会出现什么情况?我对NPM上发布的the view of a package maintainer开源软件特别感兴趣。
这是我到目前为止所提出的:
(只住在回购中)
在生成一些内部未发布软件的团队中,您可以选择使用您喜欢的任何锁定文件。两者都会使发展更顺畅。
(到像npmjs.org这样的注册表)
如果您正在开发守护程序或CLI应用程序,请使用shrinkwrap文件发送它。 package-lock.json
不会发布,因为它不会与NPM包一起发布。
不要创建一个shrinkwrap文件,参考npm-shrinkwrap.json
is discouraged for libraries:
npm-shrinkwrap.json的推荐用例是通过注册表上的发布过程部署的应用程序:例如,用作全局安装或devDependencies的守护程序和命令行工具。强烈建议图书馆作者不要发布此文件,因为这会阻止最终用户控制传递依赖关系更新。
答案 0 :(得分:1)
文档的确如此。 package-lock.json适用于应用程序。库应该依赖于package.json,并在声明的边界内使用所有版本的依赖项。
package-lock.json的目的很简单 - 在解析后将依赖关系锁定到确切的版本。它仅在应用程序级别上才有意义,因为应用程序不应该是其他任何东西的依赖项。
相比之下,库不是应用程序,并且预计会有依赖于它们的应用程序。库支持的自身依赖项的版本越多,不可解析的版本与其他库冲突的可能性就越小。所以package-lock.json与库应该具有的完全相反。