我最近刚升级到npm@5,现在我有了一个包-lock.json文件,它包含package.json的所有内容。我希望,当我运行npm install时,依赖关系版本将从锁文件中提取,以确定应该在我的node_modules目录中安装什么。奇怪的是,它实际上最终修改和重写了我的package-lock.json文件。
例如,锁文件的类型记录被指定为2.1.6版本。然后,在npm install命令之后,版本更改为2.4.1。这似乎辜负了锁文件的全部用途。
我遗漏了什么?如何让npm真正尊重我的锁文件?
发布于 2018-12-03 12:39:15
简短回答:
npm install满足package.json的要求时,它才会授予package-lock.json。npm ci。这里是一个可能解释事情的场景(用NPM6.3.0验证)
您可以在package.json中声明一个依赖项,如:
"depA": "^1.0.0"然后是npm install,它将生成一个包-lock.json,其中:
"depA": "1.0.0"几天后,发布了一个较新的次要版本的"depA“,比如"1.1.0",那么以下内容是正确的:
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更新为:
"depA": "^1.1.0"然后重新运行:
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)https://stackoverflow.com/questions/45022048
复制相似问题