当前位置: 首页 > 面试题库 >

为什么“ npm install”会重写package-lock.json?

欧阳勇
2023-03-14
问题内容

我最近才升级到 npm @ 5 。我现在有一个 package-lock.json 文件,其中包含 package.json中的
所有内容。我希望当我运行npm install该程序时,将从锁定文件中提取依赖项版本,以确定应该在我的 node_modules
目录中安装什么。奇怪的是,它实际上最终修改并重写了 package-lock.json 文件。

例如,锁定文件的打字稿指定为版本 2.1.6 。然后,在npm install命令之后,版本更改为 2.4.1
。这似乎破坏了锁定文件的全部目的。

我想念什么?如何使npm真正尊重我的锁定文件?


问题答案:

更新3: 正如其他答案所指出的那样,npm cinpm
5.7.0中引入了该命令,作为在CI上下文中实现快速且可复制的构建的其他方法。有关更多信息,请参见文档和npm博客。

更新2:
更新和澄清文档的问题是GitHub第18103号。

更新1: 以下描述的行为已在npm
5.4.2中修复:GitHub问题#17979中概述了当前预期的行为。

原始答案: 的行为package- lock.json已在问题#16866中在npm
5.1.0中更改。从5.1.0版开始,您观察到的行为显然是npm预期的。

也就是说,只要在中找到依赖项的更新版本,package.json就可以覆盖。如果要有效地固定依赖项,则现在必须指定不带前缀的版本,例如,您需要用代替或编写它们。然后,和的组合将生成可复制的构建。需要明确的是:仅凭它不再锁定根级别依赖项!package- lock.json``package.json``1.2.0``~1.2.0``^1.2.0``package.json``package- lock.json``package-lock.json

不管这个设计决定是好的还是不可行的,在GitHub上的问题#17979上引起了持续的讨论。(在我看来,这是一个值得怀疑的决定;至少这个名称lock不再适用。)

还有一点注意事项:对于不支持不可变软件包的注册表也有一个限制,例如当您直接从GitHub而不是npmjs.org提取软件包时。有关进一步的说明,请参阅此包锁文档。



 类似资料:
  • 我错过了什么?如何让npm真正尊重我的锁文件?

  • 问题内容: 我正在尝试在包级别使用Hibernate @TypeDef批注,这与Hibernate文档中所描述的完全相同。我正在使用和。代码可以编译,并且在类路径中,但是Hibernate仍然看不到它。 如果我上课,那是行得通的,但是如果我把放在那,那是没有用的。我试图用Google搜索,但找不到任何有用的信息。 谢谢! 问题答案: 您可能需要添加一个 到您的Hibernate配置文件,或调用co

  • npminstall Make npm install fast and handy. Use as Cli Install $ npm install npminstall -g Usage In cnpm It is integrated in cnpm. $ npm install cnpm -g$ cnpm install // will use npminstall npminstal

  • 本文向大家介绍请你解释为什么重写equals还要重写hashcode?相关面试题,主要包含被问及请你解释为什么重写equals还要重写hashcode?时的应答技巧和注意事项,需要的朋友参考一下 考点:java基础 HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义

  • 在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序 需要注意的是:重排序不会影响单线程环境的执行结果,但是会破坏多线程的执行语义。

  • npm@5已经发布,它有一个新的功能文件(在之后),这让我很困惑。我想知道,这个文件有什么效果?