RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 918655
Accepted
magistr4815
magistr4815
Asked:2020-12-12 00:35:17 +0000 UTC2020-12-12 00:35:17 +0000 UTC 2020-12-12 00:35:17 +0000 UTC

package-lock.json 有什么用?

  • 772

一天中的好时光。我阅读了 NPM 的文档,阅读了论坛,但我仍然不太明白这个文件的含义。

这是 npm 文档中描述的内容:

此文件旨在提交到源存储库,并用于各种目的:

1)描述依赖关系树的单一视图,以便保证部署项目的队友安装相同的依赖关系。

2)让用户能够“穿越”到 node_modules 的先前状态,而无需提交目录本身。

3)通过可读的源代码控制文本促进树中更改的更大可见性。

4)并通过允许 npm 跳过重复安装的包来简化安装过程。

问题马上就1分了,因为我package.json连package-lock.jsongit ignore都没有!他们忙碌。并且正如在同一个文档中所写的那样,当我们这样做时npm i,包管理器会安装package.json. 下载下一个库后,我们进入它并安装它的依赖项(如此递归)。在这个阶段,package-lock.json信息只是简单地显示了我们下载了哪些主要库的内部依赖。它如何帮助“保证安装相同的依赖项”?

这一切都从第 3 点开始。

嗯,我同意第4点,其实如果node_modules已经有这样的包(版本和hash相同),那么就不会安装了。但是,同样,这些信息不能通过 . 查看package-lock.json,而是在主包的依赖项中查看,因为几乎每个库都有一个内部package.json. 也就是说,我们不需要中间文件。

我是否正确理解了所有内容?请修复!

javascript
  • 4 4 个回答
  • 10 Views

4 个回答

  • Voted
  1. Алексей Соснин
    2020-03-01T14:46:37Z2020-03-01T14:46:37Z

    当你在 package.json 中写的时候jQuery: "1.3.*",他用当前最大的数字代替星号的位置,例如 1.3.7,你把项目上传到 github,一年后有人下载到你的电脑上,按 npm i而且他是从网上下载的 1.3.9 是因为开发者已经上传了新版本,而你有不同的版本。看来证据是一样的,但是朋友有bug,而你没有bug。而解决方案就是在 git 中添加 node_modules,这是一个极其疯狂的决定。因此,node_modules 文件夹的简化快照,其中安装了所有 SPECIFIC 版本,这是包锁定文件。

    你只是不把 node_modules 推到 git 中,而是这个文件,当 Petya 编写 npm i 时,它会与你的版本完全相同,并且会从互联网上下载。

    你的帽子)

    另外,当你通过npm做一些操作的时候,如果有这个文件,节点就不需要运行node_modules和扫描安装了哪些版本,它只是使用package-lock作为数据库

    • 29
  2. Best Answer
    Andrew
    2020-12-12T05:51:44Z2020-12-12T05:51:44Z

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

    项目中是否存在 package-lock.json 是可选的。此外,要禁用此文件的自动创建,您可以在.npmrc中写入package-lock=false

    • 12
  3. Ruslan Beliy
    2022-05-12T15:27:32Z2022-05-12T15:27:32Z

    当重新安装固定版本的包时,结果node_modules可能会有所不同,因为依赖关系可能会更新。为了实现确定性安装,npm使用一个package-lock.json明确描述所有依赖项的所有版本的文件。

    运行该命令时,npm i安装程​​序会从安装程序中接收项目依赖项列表,package.json并在安装过程中更新package-lock.json,并在其中写入包含必要元信息的完整依赖项树。

    要从中安装软件包package-lock.json,您需要使用另一个命令 - npm ci. 此命令安装所有依赖项,创建与上次执行时相同的依赖项树npm i。

    除了确定性之外,npm ci它还可以很好地提高安装包的速度,因此它最常用于 CI 系统中。

    • 3
  4. rossano
    2020-10-06T21:37:25Z2020-10-06T21:37:25Z

    修复包版本是它的目的。
    但是,使用该命令npm install并不能保证安装与package-lock.json. 根据package.json包版本前面写的内容(我说的是符号~和^),包仍然会更新,但会根据已安装的更新package-lock.json自行修改。npm在自动项目构建和安装包(也在脚本编写期间自动CI)运行测试时,这种行为是非常不受欢迎的。

    有一个命令npm ci。
    根据文档,在使用此命令安装软件包之前,项目文件夹node_modules将被删除。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5