【问题标题】:does package-lock.json prevent updates?package-lock.json 会阻止更新吗?
【发布时间】:2018-10-01 13:34:30
【问题描述】:

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

我读到在 5.x+ 中有package-lock.json 这个想法

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

我基本上想验证 node_modules 是否按预期工作,每次我运行 npm install 时,我都会得到相同的 node_modules 我最初做的,即使依赖关系五深决定更新他们的包我不'不想要。

【问题讨论】:

    标签: node.js package.json


    【解决方案1】:

    正如您在 cmets 中已经说过的,答案是肯定的。

    对于您的依赖项,运行npm install 将安装它们各自的package.json 中指定的版本(它们没有package-lock.json,因为它没有发布,但它们可能有shrinkwrap)除非你运行npm update。

    简而言之,如果你运行npm update,你只会在你不想运行的场景中运行,但npm install不会给你带来麻烦。

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

    【讨论】:

    • 我没有两个版本的节点。我只有 node v4.5,但是当一个包的所有者随机放弃 v4 和 v5 支持时,我的应用程序在部署时就崩溃了(我使用 amazon beanstalk,所以它可以在一个月内完成许多 npm 安装)。所以之前的问题是我的依赖项之一在他们的 package.json tar: ^4 中有一个依赖项,其中 node-tar 在没有主要版本的情况下放弃了 v4 和 v5 支持,因此尽管保持相同的 package.json 我的应用程序崩溃了你似乎误解了我的场景因为你认为只要保持相同的 package.json 就可以避免这个问题。
    • package-lock.json 也涵盖了依赖的依赖。所以应该没有办法意外获取不支持您使用的 Node 版本的 5 级依赖项的更新版本。或者说实话这是可能的,但作者应该在 package.json 中发布完全相同版本的更改,这似乎几乎是不可能的
    【解决方案2】:

    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 将被完全忽略。

    【讨论】:

    • 是的,我知道这个定义,虽然很明显我的问题的答案是“是”.. 我想确定一下。因为我在那个 5.2.x 中读到 package.json 可以覆盖 package-lock.json .. 所以我的直接依赖项可以更新,但我的依赖项的依赖项不能?
    猜你喜欢
    • 2021-06-24
    • 2019-04-06
    • 1970-01-01
    • 2019-03-11
    • 2017-12-16
    • 2017-11-16
    • 1970-01-01
    • 2018-04-19
    • 2018-12-07
    相关资源
    最近更新 更多