我从另一个项目中复制了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 3.10.10的package.json的命令:

npm install -g npm-check-updates
ncu -a
npm install

背景:

我使用的是@josh3736的最新命令,但我的package.json没有更新。然后,在运行npm检查更新-u时,我注意到了描述文本:

以下依赖性通过其声明的版本范围来满足,但安装的版本落后。您可以安装最新的版本,而无需使用npm更新来修改包文件。如果如果仍要更新包文件中的依赖项,请运行ncu-a。

阅读npm检查更新的文档,您可以看到不同之处:

https://www.npmjs.com/package/npm-check-updates

-u、 --升级:覆盖包文件-a、 --upgradeAll:甚至包括最新版本满足声明的semver依赖项的依赖项

ncu是npm check updates的别名,如键入npm check update-u时的消息所示:

[INFO]: You can also use ncu as an alias

其他回答

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

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

最近我一直在使用taze

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

如果使用yarn,以下命令会将所有包更新为最新版本:

纱线升级--最新

从他们的文档中:

upgrade-latest命令升级的包与upgrade命令相同,但忽略package.json中指定的版本范围。相反,将使用最新标记指定的版本(可能跨主要版本升级包)。

我使用npm检查来实现这一点。

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

另一个有用的命令列表,它将在package.json中保留准确的版本号

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -u #update locals
npm I

更新:您可以使用yarn升级交互式--如果您使用yarn,则为最新版本

如果您不想安装全局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 1.3.15中起作用。

"dependencies": {
  "foo": "latest"
}