package-lock.json是否阻止更新?

时间:2018-07-12 05:42:44

标签: node.js package.json

我的应用程序是节点v4,我在v4上回写了它,从不需要更新它(如果它没有损坏...)。也就是说,直到其中一个依赖项在次要版本更新中删除了v4支持。

我读到5.x +

中有package-lock.json的想法

在必须从源代码重新安装时,package-lock.jso n概念是否可以防止次要版本破坏我的应用程序的情况?

我基本上想验证node_modules是否按预期工作,并且每次运行npm install时,我都会得到与最初所做的相同的node_modules,即使有5个深层的依存关系决定更新他们不想要的包裹。

2 个答案:

答案 0 :(得分:2)

正如您在评论中所说,答案是肯定的。

对于您的依赖项依赖项,运行npm install将安装在各自的package.json中指定的版本(它们没有package-lock.json,因为它尚未发布,但是他们可能具有{{ 3}}),除非您运行shrinkwrap

简而言之,如果您运行npm update,只会在您不希望的情况下运行,但是npm install不会给您带来麻烦。

顺便说一句,您可以通过将package.json复制到2个环境中来轻松地复制该行为,在该环境中您拥有所需的2个版本的节点。

答案 1 :(得分:1)

package-lock.json是为npm修改node_modules树或package.json的任何操作自动生成的。它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。

此文件旨在提交到源存储库中,并具有多种用途:

描述一个依赖关系树的单一表示,这样可以确保队友,部署和持续集成安装完全相同的依赖关系。

为用户提供一种工具,使其可以“时间旅行”到node_modules的先前状态,而不必提交目录本身。

为了通过可读的源代码控制差异来更好地了解树的变化。

并允许npm跳过以前安装的软件包的重复元数据解析,从而优化安装过程。

关于package-lock.json的一个关键细节是它无法发布,并且如果在顶级软件包之外的任何地方都将被忽略。它与npm-shrinkwrap.json(5)共享一种格式,该格式本质上是相同的文件,但是可以发布。除非部署CLI工具或使用发布过程来生产生产软件包,否则不建议这样做。

如果package-lock.json和npm-shrinkwrap.json都存在于包的根目录中,则package-lock.json将被完全忽略。