【问题标题】:Do I need both package-lock.json and package.json?我需要 package-lock.json 和 package.json 吗?
【发布时间】:2017-12-16 13:51:00
【问题描述】:

将我的 NPM 更新到最新版本(从 3.X 到 5.2.0)并在现有项目上运行 npm install 后,我得到一个自动创建的 package-lock.json 文件。

我可以告诉我package-lock.json 给了我一个精确的依赖树而不是package.json

仅从该信息来看,package.json 似乎是多余的,不再需要。

它们都是 NPM 工作所必需的吗?
仅使用package-lock.json 文件是否安全或可能?

package-lock.json 上的文档(doc1doc2)没有提及任何相关内容。

编辑

经过深思熟虑后,我得出的结论是,如果有人想将您的项目与旧版本的 NPM(5.x 之前)一起使用,它仍然会安装所有依赖项,但版本不太准确(补丁版本)

【问题讨论】:

  • @Omri 除非您以 java 方式执行此操作,并且工具版本由您的项目确定。 IE。如果我在我的回购中回到 1 年,它使用的是旧版本的 gradle,所以我从不担心。
  • 大多数人不做我推荐的事情,这就是为什么 npm 可能不得不同时保留 java 中的 where,gradle wrapper 被设置为完全做到这一点,这样他们就可以从一个文件移动到另一个文件并且没有向后兼容的复制。

标签: npm npm-install package.json package-lock.json


【解决方案1】:

您需要package-lock.jsonpackage.json 吗? 没有

您需要package.json 吗? 是的

你能有一个只有package-lock.json 的项目吗? 没有

package.json 不仅仅用于依赖项,例如定义项目属性、描述、作者和许可信息、脚本等。package-lock.json 仅用于将依赖项锁定到特定版本号。

【讨论】:

【解决方案2】:

package-lock.json:记录每个已安装包的确切版本,以便您重新安装它们。未来的安装将能够构建相同的依赖关系树。

package.json:记录你的应用需要的最低版本。如果您更新特定软件包的版本,则更改不会在此处反映出来。

【讨论】:

  • 如果上述情况属实,并且package.json 记录了应用程序所需的最低版本,而 package-lock.json 记录了每个已安装包的确切版本,那么我遇到了一个奇怪的情况模块在 package.json 中设置为 0.112.1 版本,在 package-lock.json 中设置为 0.110.0...
【解决方案3】:

如果您的问题是是否应该将锁定文件提交给您的源代码管理 - 它应该。在某些情况下会被忽略。

我发现它膨胀的拉取请求和提交历史,所以如果你看到它发生变化,请为它做一个单独的提交。

【讨论】:

  • 不,我不是在询问对源代码控制的提交。如果 NPM 需要它们同时工作。 package-lock.json 似乎是package.json 的更详细版本,所以只使用锁定文件是否安全或可能。
  • 我明白了,我把 package.json 留在了我的项目中,主要是为了给 npm 脚本留一个位置。
  • 现在有一个separate question 是否将package-lock.json 置于版本控制之下。
【解决方案4】:
 Package.json vs Package.lock.json

【讨论】:

  • 这是很好的信息,但来源是什么?
【解决方案5】:

关于保留 package-lock.json 的原因更准确详细的解释可以看here

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2019-07-18
    • 2018-10-06
    • 2019-03-10
    • 2019-09-05
    • 2022-08-15
    • 2018-07-05
    • 2018-12-14
    • 2019-02-16
    相关资源
    最近更新 更多