如何将 package.json 中的每个依赖关系更新为最新版本?

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

最简单的方法是什么?

我现在所知道的最好方法是运行npm info express version然后为每个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"
  }
}

19 年 5 月 1 日更新 :六年后,我仍在维护npm-check-updates作为该问题的综合解决方案。请享用!

答案

看起来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 。它将列出具有较新版本的所有已安装依赖项。

npm-check-updates是一个实用程序,可使用所有依赖项的最新版本自动调整 package.json

参见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 7 更新

npm 2+(节点 0.12+):

npm outdated
npm update
git commit package-lock.json

古代 npm(大约 2014 年):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

确保收缩您的部门,否则您可能会遇到一个死项目。前几天,我退出了一个项目,由于我的部门已经过时 / 已更新 / 一团糟,因此无法运行。如果我只好包装,npm 会完全安装我需要的东西。


细节

对于那些好奇的人来说,这里是我的建议:

使用npm-check-updatesnpm outdated来建议最新版本。

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

然后进行全新安装(没有 rm,我得到了一些依赖警告)

$ rm -rf node_modules
$ npm install

最后,使用npm shrinkwrap将确切版本保存到npm-shrinkwrap.json npm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

现在, npm install现在将使用npm-shrinkwrap.json确切版本

如果将npm-shrinkwrap.json签入 git,则所有安装将使用完全相同的版本。

这是一种从开发(所有更新,一直)过渡到生产(没有任何接触)的方法。

ps Yarn 正在将您的包裹清单发送到 Facebook

要将一个依赖项更新到最新版本,而不必手动打开package.json并进行更改,可以运行

npm install {package-name}@* {save flags?}

npm install express@* --save

供参考, npm-install


正如用户Vespakoen在拒绝编辑中指出的那样 ,也可以通过以下方式一次更新多个软件包:

npm install --save package-nave@* other-package@* whatever-thing@*

他还根据npm outdated为外壳分配了一个衬里。有关代码和说明,请参见编辑


PS:我也讨厌不得不手动编辑package.json的东西;)

如果您恰好使用Visual Studio Code作为您的 IDE,那么这是一个有趣的小扩展,它使package.json更新package.json成为可能。

版本许可证

在此处输入图片说明

从 npm 1.3.15 开始运行。

"dependencies": {
  "foo": "latest"
}
  1. 使用*作为最新版本的版本,包括不稳定版本
  2. 使用latest作为最新的稳定版本的版本定义
  3. 使用LatestStablePackages用确切的最新稳定版本号修改 package.json

这是一个例子:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

我发现以上最佳答案的唯一警告是,它将模块更新为最新版本。这意味着它可能会更新为不稳定的 alpha 版本。

我将使用该 npm-check-updates 实用程序。我的小组使用了此工具,并且通过安装稳定的更新使其有效地工作。

正如 Etienne 所述:安装并运行此程序:

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

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

npm outdated

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

npm install yourPackage@latest --save

例如:

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

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

那我应该写:

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

我真的很喜欢npm-upgrade 的工作方式。它是一个简单的命令行实用程序,它遍历了所有依赖项,可让您将当前版本与最新版本进行比较,并根据需要进行更新。

这是在项目根目录(在package.json文件旁边)中运行npm-upgrade后发生的情况的屏幕截图:

npm升级示例

对于每个依赖项,您可以选择升级,忽略,查看更改日志或完成该过程。到目前为止,对我来说效果很好。

编辑:要清楚这是一个第三方软件包,需要先安装该命令才能起作用。它不随 npm 一起提供:

npm install -g npm-upgrade

然后从具有 package.json 文件的项目的根目录开始:

npm-upgrade