11

在您将其标记为重复之前,我已经搜索了类似的问题,但没有一个对我有帮助。

目前这是我尝试过的:

  1. 删除 package-lock.json 文件。
  2. 删除节点模块。
  3. npm update
  4. npm install

这将始终允许我在 node_modules 中安装最新(次要)版本的软件包,并更新 package-lock.json 文件。但是,package.json 文件不会更新。

例如,我的时刻是 package.json 表示为“时刻”:“^2.27.0”。运行上述步骤后,package-lock.json 将更新为 "moment": { "version": "2.29.1", ...} 但 package.json 仍将是 "moment": "^2.27.0"。

这样做的正确方法是什么?手动运行npm install moment将 package.json 更新为 "moment": "^2.29.1" 但如果我必须为每个依赖项运行 npm install ,这很荒谬吗?

编辑 感谢选择的答案,我意识到我实际上不需要更新我的 package.json,因为它显示的是兼容版本,而不是确切的版本。

4

2 回答 2

11

package.json 不会更新 npm install。其中包含有关依赖项和兼容版本列表。

"moment": "^2.27.0" 意思 allowed moment version: 2.27.0 <= version < 3.0.0,不是 allowed moment version = 2.27.0。因此,当您运行时 npm install,npm 将安装 the latest version of major version 2(在您的情况下,  2.29.1),但 package.json 不会由该命令更新。因为它不包含 installed version,它包含 compatible version

但是, npm install moment 命令 do install the latest version of moment,所以 package.json 更新了最新版本,因为 "^2.27.0" 低于 "^2.29.1".

无论如何,如果你想更新你的 package.json,你可以使用 npm-check-updates (aka ncu)。 看到这个答案。如果您不想运行ncu,您可以随时使用 "latest"(示例 "moment": "latest":)安装最新版本。

于 2020-12-01T09:37:39.810 回答
7

npm outdated列出所有可以使用当前、想要和最新版本号更新的软件包。

  • current 是当前安装的版本
  • 想要的是最后一个小版本更新
  • latest 是最新的主要版本更新

要将所有软件包更新到最新版本,只需执行以下操作:

npm outdated | awk 'NR>1 {print $1"@"$4}' | xargs npm install

它只是使用每个过时软件包的最新版本调用 npm install 。

强烈建议检查对packages.json文件所做的更改,以确保所有更改都符合预期。

于 2021-04-17T22:01:14.500 回答