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

node.js Node.js

飞羽

2020-03-13

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

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

第1430篇《如何将package.json中的每个依赖关系更新为最新版本?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

26个回答
小哥阿飞神奇 2020.03.13

我通过查看https://github.com/tjunnone/npm-check-updates中的说明解决了此问题

$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name"  #in case you want to update specific dependencies to latest
Harry飞云 2020.03.13

如果使用Github,则为Greenkeeper。https://greenkeeper.io/

这是Github的集成,设置起来非常容易。安装后,它会在您指定的存储库(或所有需要的存储库)中自动创建拉取请求,并使代码始终保持最新状态,而无需强制您手动执行任何操作。然后,PR应当触发基于CI服务的构建,并且根据检查的成功或失败,您可以不断找出引发问题的原因或CI通过时仅合并PR。

格林门卫PR 1 格林门卫PR 2

在底部,您可以看到第一个构建首先失败,并且在提交(“升级到节点v6.9”)之后测试通过了,因此我最终可以合并PR。也带有很多表情符号。

另一个选择是https://dependencyci.com/,但是我没有对其进行深入测试。初看之后,Greenkeeper在一般的IMO中看起来更好,并且具有更好的集成性。

阿飞西里 2020.03.13
  • npm过时了
  • npm更新

应该会为您提供与您的应用程序兼容的最新通缉版本。但不是最新版本。

飞云Pro 2020.03.13

解决方案,无需其他软件包

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

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

然后运行npm update --save

您的某些软件包已更新,但有些未更新?

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

这是棘手的部分,这意味着您本地的“反应”版本低于最新版本。在这种情况下,npm下载并更新了“ react”包。但是,“ react-google-maps”的本地版本与最新版本相同。

如果仍要“更新”不变*,则必须从node_modules文件夹中删除这些模块

例如delete node_modules/react-google-maps

终于再次运行npm update --save

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

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

神无宝儿 2020.03.13

我找到了最新版本的NPM的另一种解决方案。我想要做的是用明确的最新版本号替换所有“ *”依赖项。所讨论的方法都没有对我有用。

我做了什么:

  1. 将所有“ *”替换为“ ^ 0.0.0”
  2. npm-check-updates -u

现在package.json中的所有内容都更新为最新版本。

番长猴子古一 2020.03.13

下面的代码(被接受)写了一些类似的信息,“花了太多时间等等”,却什么也没做。问题可能是使用全局标志idk。

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

我决定使用我的文本编辑器,而是改用半手动方法。

我将这样的列表(只是更长的时间)从我的开发依赖项复制package.json到了notepad ++文本编辑器中:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

我将搜索模式设置为正则表达式,使用该^\s*"([^"]+)".*$模式获取程序包名称并将其替换为npm uninstall \1 --save-dev \nnpm install \1 --save-dev点击“全部替换”。otput是这样的:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

我将其复制回bash,然后按Enter。一切都已升级,并且工作正常。就这样。

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

我认为这没什么大不了的,因为您只需要不时地执行此操作,但是您可以轻松编写脚本来解析package.json和升级您的软件包。我认为这样更好,因为如果需要一些特殊的东西,例如保留当前版本的lib,可以编辑列表。

JinJinLEY 2020.03.13

替代是

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

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

null 2020.03.13

如果使用npm 5和节点8,请尝试执行以下命令

npm更新-保存

Jim小哥GO 2020.03.13

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

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

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

Updtr!

基于过期的npm,updtr将安装最新版本并为每个依赖项运行npm test。如果测试成功,则updtr会将新版本号保存到package.json中。但是,如果测试失败,则updtr会回滚其更改。

https://github.com/peerigon/updtr

番长理查德 2020.03.13

命令,我不得不使用更新package.jsonNPM 3.10.10

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

背景:

我正在使用@ josh3736的最新命令,package.json但未更新。然后我在运行时注意到描述文本npm-check-updates -u

声明的版本范围满足以下依赖关系,但已安装的版本落后。您可以使用npm update安装最新版本,而无需修改软件包文件。如果仍然要更新软件包文件中的依赖关系,请运行ncu -a。

阅读有关npm-check-updates的文档,您可以看到不同之处:

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

-u,-upgrade:覆盖软件包文件

-a,--upgradeAll:甚至包括那些最新版本满足声明的semver依赖关系的依赖项

ncu是npm-check-updates输入时在消息中看到的别名npm-check-updates -u

[INFO]: You can also use ncu as an alias
LEY古一阿飞 2020.03.13

上面的命令不安全,因为切换版本时可能会损坏模块。相反,我建议以下

  • 使用npm shrinkwrap命令将当前当前实际的节点模块版本设置为package.json
  • 如果不使用https://github.com/bahmutov/next-update命令行工具破坏测试,则将每个依赖项更新到最新版本
npm install -g下一步更新
//从您的包中
下次更新
神奇A阿飞 2020.03.13

如果您使用yarnyarn upgrade-interactive则它是一个非常时尚的工具,可以让您查看过时的依赖项,然后选择要更新的依赖项。

使用Yarn over的更多原因npmh

Green蛋蛋 2020.03.13

npm-check用来实现这一目标。

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 -ua #update locals
npm i
Jim西门 2020.03.13

如果您想通过漂亮的(用于终端的)交互式报告界面使用温和的方法,我建议您使用npm-check

它不费吹灰之力,为您提供了更多有关依赖更新的知识,并可以对其进行控制。

为了让您了解正在等待的内容,以下是屏幕截图(从git页面中抓取,用于npm-check):

在此处输入图片说明

GO番长 2020.03.13

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

yarn upgrade --latest

从他们的文档

upgrade --latest命令upgrade软件包与upgrade命令相同,但是忽略package.json中指定的版本范围。取而代之的是,将使用由最新标签指定的版本(可能会在主要版本中升级软件包)。

达蒙A宝儿 2020.03.13

此功能已在中引入npm v5使用npm install -g npm@latest更新到npm

更新 package.json

  1. 删除/node_modulespackage-lock.json (if you have any)

  2. 运行npm update这将根据semver将依赖项package.json更新为最新版本

更新到最新版本。你可以去npm-check-updates

小卤蛋卡卡西 2020.03.13

这是匹配语义版本号的基本正则表达式,因此您可以快速将它们全部替换为星号。

语义版本正则表达式

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

如何使用

在JSON文件中选择要替换的软件包版本。

屏幕截图:选择要替换的文本

在上方输入正则表达式,然后验证其是否与正确的文本匹配。

屏幕截图:在上面输入semver regex

用星号替换所有匹配项。

屏幕截图:用星号替换软件包版本

npm update --save

小宇宙猪猪 2020.03.13

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

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

npm升级示例

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

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

npm install -g npm-upgrade

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

npm-upgrade
GilStafan 2020.03.13

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

npm outdated

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

npm install yourPackage@latest --save

例如:

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

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

那我应该写:

npm install @progress/kendo-angular-dateinputs@latest --save
卡卡西乐 2020.03.13

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

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

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

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
猿樱 2020.03.13
  1. 使用*的版本为最新版本,包括不稳定
  2. 使用latest的版本定义了最新的稳定版本
  3. 使用确切地使用最新的稳定版本号修改package.json LatestStablePackages

这是一个例子:

"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"
},
番长古一GO 2020.03.13

从npm 1.3.15开始运行。

"dependencies": {
  "foo": "latest"
}
Ss Yy 2020.03.13

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 
猴子樱 2020.03.13

如果您恰好使用Visual Studio Code作为您的IDE,那么这是一个有趣的小扩展,用于更新package.json一键式过程。

版本许可证

在此处输入图片说明

W先生 2020.03.13

要将一个依赖项更新到最新版本,而不必手动打开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;)

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android