我从另一个项目中复制了package.json,现在想将所有依赖项都升级到最新版本,因为这是一个新项目,如果出现问题,我不介意修复。

最简单的方法是什么?

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

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^3.0.3", // how do I get these bumped to latest?
    "mongodb": "^1.2.5",
    "underscore": "^1.4.2"
  }
}

有关纱线特定的解决方案,请参阅本堆栈溢出线程。


当前回答

如果您不想安装全局npm检查更新,您只需运行:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

其他回答

从npm 5.2.0版开始,有一种方法可以在一行中运行,而无需在全局npm注册表或本地应用程序中安装任何附加包。这可以通过利用与npm捆绑的新npx实用程序来实现。(单击此处了解更多信息。)

在项目的根目录中运行以下命令:

npx npm-check-updates -u && npm i

要查看哪些软件包具有可用的更新版本,请使用以下命令:

npm outdated

要只更新一个依赖项,只需使用以下命令:

npm install yourPackage@latest

例如:

我的package.json文件具有依赖关系:

"@progress/kendo-angular-dateinputs": "^1.3.1",

那么我应该写:

npm install @progress/kendo-angular-dateinputs@latest

save dev是什么意思?

npm install @progress/kendo-angular-dateinputs@latest --save-dev

正如npm安装文档所说:

-D、 --save dev:Package将显示在devDependencies中。

由于距离最初的问题已经过去了近10年,许多答案要么过时,要么不推荐。

我会使用与包管理器无关的东西,即可以与npm、pnpm、yarn或其他东西一起工作。

最近我一直在使用taze

您可以将其添加到开发依赖项中并从那里运行,也可以在不安装npx-taze或pnx-taze等的情况下运行。

这会很有帮助npm过时|awk‘{if(NR>1){print$1“@”$4}}‘|xargs npm i

我觉得90%的答案都是“使用npm检查更新”的变体。以下是我所做的(相关代码):

{
  "devDependencies": {
    "updates": "^13.0.5" // the version here could be "latest" or "*" tbh...
  },
  "scripts": {
    "test:dependencies": "updates --update ./",
  }
}

运行npm运行测试:dependencies(或调用依赖项更新脚本)将检查package.json中列出的每个包的最新版本,并让您知道最新版本的发布时间。在那之后运行npm i,您将获得最新信息!

此外,与npm检查更新不同,更新具有零依赖性(在本文发布时,ncu有29个)。