如何将 package.json 中的每个依赖项更新到最新版本?

新手上路,请多包涵

我从另一个项目中复制了 package.json 并且现在想将所有依赖项升级到最新版本,因为这是一个新项目,如果它坏了我不介意修复一些东西。

最简单的方法是什么?

我知道的最好方法是运行 npm info express version 然后手动更新 package.json 中的每个依赖项。一定会有更好的办法。

 {
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}


对于 Yarn 特定的解决方案,请参阅 此 Stack Overflow 线程。

原文由 Raine Revere 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

看起来 npm-check-updates 是现在实现这一点的唯一方法。

 npm i -g npm-check-updates
ncu -u
npm install


在 npm <3.11 上:

只需将每个依赖项的版本更改为 * ,然后运行 npm update --save 。 ( 注意: 在最近(3.11)版本的 npm 中损坏)。

前:

   "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

后:

   "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }


当然,这是更新依赖的钝锤。如果——正如你所说——项目是空的并且没有什么可以破坏,那很好。

另一方面,如果您在一个更成熟的项目中工作,您可能希望在升级之前验证您的依赖项中没有重大更改。

要查看哪些模块已过时,只需运行 npm outdated 。它将列出所有已安装的具有较新版本的依赖项。

对于 Yarn 特定的解决方案,请参阅 此 StackOverflow 答案

原文由 josh3736 发布,翻译遵循 CC BY-SA 4.0 许可协议

扩展@kozlovd 答案,我构建了一个 bash 脚本,分两步更新任何 npm 脚本:

  1. 这为您提供了 npm 包的数量,如果您收到错误,请手动计算它们。

npm list | wc -l

  1. 这里将 NUM_PKGS 替换为包的数量,如果在前面的命令中出现“UNMET DEPENDENCY”错误,请将 \(2 替换为 \)4。
 NUM_PKGS=9999; npm list --no-unicode | awk -v NUM_PKGS=$NUM_PKGS '{\
    if (NR>1 && NR <NUM_PKGS) {\
        pver=A[split($2,A,"@")];\
        print substr($2,0,length($2)-length(pver))"latest";\
    }\
}' | xargs -r npm i

解释:

命令 Nº 2 首先获取包名称,并且仅在出现“UNMET DEPENDENCY”错误的情况下对它们的行进行操作,然后 awk 遍历每个包名称,它获取版本值并将其替换为“最新”,最后所有被替换版本的那些包由 xargs 收集,xargs 在“npm i”之后将它们连接起来,最终将它们全部安装到最新版本。

此步骤可以使用没有设置版本或现有项目的包更新新项目

原文由 Ubuntu4Life 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题