我从另一个项目中复制了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()))"

其他回答

备选方案是

"dependencies":{
    "foo" : ">=1.4.5"
}

每次使用npm更新时,它都会自动更新到最新版本。有关更多版本语法,请查看此处:https://www.npmjs.org/doc/misc/semver.html

无需额外软件包的解决方案

将每个依赖项的版本更改为*:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

然后运行npm update--save。

您的一些软件包已更新,但有些没有更新?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

这是一个棘手的部分,这意味着你的本地版本“react”比最新版本低。在本例中,npm下载并更新了“react”包。然而,您的本地版本“反应谷歌地图”与最新版本相同。

如果您仍然希望“更新”未更改*,则必须从node_modules文件夹中删除这些模块。

例如删除node_modules/react谷歌地图。

最后再次运行npm更新--save。

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

如果您想更新开发依赖项,请不要忘记运行npm update--save dev。

npm check updates是一个实用程序,它使用所有依赖项的最新版本

看见https://www.npmjs.org/package/npm-check-updates

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

[编辑]如果你有一个现代版本的npm,一种稍微不那么侵入性(避免全局安装)的方法是:

$ npx npm-check-updates -u
$ npm install 

我最近不得不更新几个使用npm和package.json实现gruntfile.js魔法的项目。以下bash命令(多行命令)对我来说效果很好:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

这里的想法是:将npm过时的输出作为json传输到jq(jq是一个json命令行解析器/查询工具)(注意npm过时时使用--depth参数)jq将仅将输出剥离到顶级包名称。最后xargs将每个LIBRARYNAME一次一个放入npm install LIBRARYNAME--save dev命令

以上是我在机器运行时所做的工作:节点=v0.11.10 osx=10.9.2 npm=1.3.24

这需要:xargs公司http://en.wikipedia.org/wiki/Xargs(我相信是我的机器固有的)和jq公司http://stedolan.github.io/jq/(我用brew install jq安装了它)

注意:我只使用--save-dev将更新的库保存到json键devDependencies中的package.json,这是我的项目的要求,很可能不是你的。

之后,我用一个简单的

npm outdated --depth=0

此外,您可以使用

npm list --depth=0

在2023年,我简单地使用了:

$npm更新

许多软件包都在此时更新,但您可能会收到一条消息,其中一些需要修复。在这种情况下,我跑了:

$npm审计修复--强制

最后,为了确保它已全部安装,我运行

$npm安装

就是这样,我的包更新了。无需手动编辑配置文件。