当依赖版本不同步时如何对齐 package.json 和 package-lock.json?

Mas*_*oob 5 node.js npm npm-install

发生了什么

在 Package.json 中:

"dependencies": {
    ...
    "node-sass": "^4.13.0"
    ...
}
Run Code Online (Sandbox Code Playgroud)

跑步npm install

在 package-lock.json 中:

"node-sass": {
    "version": "4.13.1",
    ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的

1.

删除:

  • 包锁.json
  • 节点模块目录

然后运行npm install

2.

删除:

  • 包锁.json
  • 节点模块目录

然后运行npm install --cache /temp/empty-cache

3.

删除:

  • 包锁.json
  • 节点模块目录

然后运行npm update

结果:node-sass 未被检测为可更新

4.

跑步npm install node-sass@4.13.1

这显然可以将它们同步备份,但感觉不对,因为这可能会在我不知情的情况下发生在其他依赖项上。

问题

  • 如何在不手动安装 4.13.1 的情况下使 package.json 和 package-lock 恢复同步?
  • [Bonus] 为什么 4.13.1 总是被 package-lock.json 安装和使用?
  • [Bonus] 为什么 node-sass no 被识别为需要更新?

[编辑]

如果有人有一个不涉及手动更新依赖项的答案,我仍然会喜欢这个答案

小智 6

这解决了我的问题

npm install --package-lock-only

  • 嗨,布兰奇·卡斯滕斯;这是一个很好的答案,但如果您能简要解释一下为什么需要这个命令,那就更好了。 (3认同)

Man*_*lon 5

这些依赖项正是您所配置的:

在您package.json定义的中^4.13.0,这^意味着您可以很好地安装该模块的最新版本(主要版本为 4)。因此,当您运行时,您将安装与该semver 范围npm install匹配的所有依赖项。您可以更深入地了解semver

如果您想锁定版本,您需要写入"node-sass": "4.13.0"package.json重新创建package-lock.json

此外,要安装其中的内容,package-lock.json您需要运行npm ci. 如果您运行,npm install您将更新锁定文件中的依赖项(将被更新)


当依赖版本不同步时,如何对齐 package.json 和 package-lock.json?

重新生成包锁

例子:

npm init --yes
npm init fastify@2.0.0
// now package-lock has 2.0.0
rm -rf node_modules/
npm install
// now package-lock has 2.0.0 still
rm package-lock.json
npm install fastify@2.5.0 --no-save
npm install
// now package-lock has 2.5.0 (the version is loaded by node_modules tree)
rm package-lock.json
rm -rf node_modules/
npm install
// now package-lock has 2.11.0
Run Code Online (Sandbox Code Playgroud)

因此,如果您的文件不同步,请在不使用锁定文件的情况下运行安装