首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么"npm安装“重写包-lock.json?

为什么"npm安装“重写包-lock.json?
EN

Stack Overflow用户
提问于 2017-07-10 21:38:49
回答 12查看 378.4K关注 0票数 887

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

例如,锁文件的类型记录被指定为2.1.6版本。然后,在npm install命令之后,版本更改为2.4.1。这似乎辜负了锁文件的全部用途。

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

EN

Stack Overflow用户

发布于 2018-12-03 12:39:15

简短回答:

  • 只有当npm install满足package.json的要求时,它才会授予package-lock.json。
  • 如果它不满足这些要求,包将被更新&包锁被覆盖。
  • 如果您希望安装失败,而不是在这种情况下覆盖包锁,请使用npm ci

这里是一个可能解释事情的场景(用NPM6.3.0验证)

您可以在package.json中声明一个依赖项,如:

代码语言:javascript
运行
复制
"depA": "^1.0.0"

然后是npm install,它将生成一个包-lock.json,其中:

代码语言:javascript
运行
复制
"depA": "1.0.0"

几天后,发布了一个较新的次要版本的"depA“,比如"1.1.0",那么以下内容是正确的:

代码语言:javascript
运行
复制
npm ci       # respects only package-lock.json and installs 1.0.0

npm install  # also, respects the package-lock version and keeps 1.0.0 installed 
             # (i.e. when package-lock.json exists, it overrules package.json)

接下来,手动将package.json更新为:

代码语言:javascript
运行
复制
"depA": "^1.1.0"

然后重新运行:

代码语言:javascript
运行
复制
npm ci      # will try to honor package-lock which says 1.0.0
            # but that does not satisfy package.json requirement of "^1.1.0" 
            # so it would throw an error 

npm install # installs "1.1.0" (as required by the updated package.json)
            # also rewrites package-lock.json version to "1.1.0"
            # (i.e. when package.json is modified, it overrules the package-lock.json)
票数 159
EN
查看全部 12 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45022048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档