最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

为什么“npm install”重写package

运维笔记admin15浏览0评论

为什么“npm install”重写package

为什么“npm install”重写package

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

例如,锁定文件的typescript指定为版本2.1.6。然后,在npm install命令之后,版本更改为2.4.1。这似乎打败了锁定文件的整个目的。

我错过了什么?如何让npm真正尊重我的锁文件?

回答如下:

更新3:正如其他答案所指出的那样,npm ci命令在npm 5.7.0中引入,作为在CI上下文中实现快速且可重现的构建的另一种方式。有关详细信息,请参阅documentation和npm blog。


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


更新1:下面描述的行为在npm 5.4.2中得到修复:当前预期的行为在GitHub issue #17979中列出。


原始答案:正如package-lock.json所讨论的那样,npm 5.1.0的行为发生了变化。您观察到的行为显然是从版本5.1.0开始的npm。

这意味着只要找到issue #16866中依赖项的较新版本,package.json就可以胜过package-lock.json。如果要有效地固定依赖关系,现在必须指定没有前缀的版本,例如,您需要将它们编写为package.json而不是1.2.0~1.2.0。然后^1.2.0package.json的组合将产生可重复的构建。要明确:单独的package-lock.json不再锁定根级依赖项!

无论这个设计决定是否合适都是有争议的,因此在package-lock.json对GitHub的混淆导致了持续的讨论。 (在我看来,这是一个值得怀疑的决定;至少issue #17979的名称不再适用。)

还有一个注意事项:对不支持不可变包的注册表也有限制,例如直接从GitHub而不是npmjs提取包时。有关详细说明,请参阅lock

发布评论

评论列表(0)

  1. 暂无评论