2337

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

对于Yarn特定的解决方案,请参阅此 Stack Overflow线程。

4

34 回答 34

2783

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

对于Yarn特定的解决方案,请参阅此 StackOverflow 答案

于 2013-04-18T03:35:05.653 回答
1147

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 
于 2014-04-03T21:53:00.453 回答
422

为 npm v2+ 更新

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.jsonwithnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

现在,npm install现在将在npm-shrinkwrap.json

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

这是一种从开发(所有更新,一直)过渡到生产(没有人什么都不做)的方法。

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

于 2015-06-02T22:29:34.757 回答
219

要将一个依赖项更新到其最新版本而无需手动打开package.json并更改它,您可以运行

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

IE

npm install express@* --save

作为参考,npm-install


更新:最近的版本可能需要最新的标志,即npm install express@latest


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

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

他还为基于npm outdated. 请参阅编辑以获取代码和解释。


PS:我也讨厌必须手动编辑package.json这样的东西;)

于 2014-04-30T14:51:12.420 回答
134

如果您碰巧使用Visual Studio Code作为您的 IDE,这是一个有趣的小扩展,可以让更新package.json一键式过程。

版本镜头

在此处输入图像描述

GitLab 回购

于 2017-03-27T20:00:30.770 回答
69

这适用于 npm 1.3.15。

"dependencies": {
  "foo": "latest"
}
于 2014-01-21T22:35:57.067 回答
64
  1. Use * as the version for the latest releases, including unstable
  2. Use latest as version definition for the latest stable version
  3. Modify the package.json with exactly the latest stable version number using LatestStablePackages

Here is an example:

"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"
},
于 2015-01-23T03:45:26.570 回答
51

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

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 install docs 所说:

-D, --save-dev:包会出现在你的devDependencies中。

于 2017-12-07T07:01:18.667 回答
47

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

我会使用那个 npm-check-updates 实用程序。我的小组使用了这个工具,它通过安装稳定的更新有效地工作。

正如 Etienne 上面所说:安装和运行这个:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
于 2015-02-11T23:37:53.260 回答
42

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

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

npm 升级示例

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

编辑:要清楚这是一个第三方包,需要在命令生效之前安装。它不附带 npm 本身:

npm install -g npm-upgrade

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

npm-upgrade
于 2017-08-22T20:08:27.347 回答
25

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

语义版本正则表达式

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

如何使用

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

截图:选择要替换的文本

输入上面的正则表达式并验证它是否匹配正确的文本。

截图:输入上面的 semver 正则表达式

用星号替换所有匹配项。

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

npm update --save

于 2016-03-04T15:21:20.107 回答
21

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

它不像一把锤子,让您对依赖更新有更多的相关知识和控制权。

为了让您了解等待这里的内容,这里有一个屏幕截图(从 npm-check 的 git 页面中抓取):

在此处输入图像描述

于 2018-11-27T06:04:06.510 回答
20

此功能已在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

于 2017-06-01T05:34:43.873 回答
18

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

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

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

以上是在运行的机器上对我有用的: node=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

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

之后我用一个简单的方法检查所有东西都是肉汁

npm outdated --depth=0

此外,您可以检查当前顶级安装的库版本

npm list --depth=0
于 2014-04-28T19:14:44.033 回答
18

从 npm 版本 5.2.0 开始,有一种方法可以在一行中运行它,而无需在全局 npm 注册表或本地应用程序中安装任何额外的包。这可以通过利用npx与 npm 捆绑在一起的新实用程序来完成。(点击这里了解更多。

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

npx npm-check-updates -u && npm i
于 2019-02-01T20:06:59.883 回答
17

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

yarn upgrade --latest

从他们的文档中

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

于 2018-04-17T13:14:24.043 回答
16

我用它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
于 2017-04-17T14:16:30.400 回答
12

更新!

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

https://github.com/peerigon/updtr

于 2016-05-27T22:24:01.040 回答
9

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

更多使用 Yarn 的理由npm。呵呵。

于 2017-06-13T10:00:29.320 回答
9

我必须用来更新package.json的命令NPM 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依赖的依赖

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

[INFO]: You can also use ncu as an alias
于 2017-11-01T13:02:35.993 回答
8

安全更新

  1. 使用“npm outdated”来发现过期的依赖项。

  2. 使用“npm update”来执行安全的依赖升级。

  3. 使用 'npm install @latest' 升级到软件包的最新主要版本。

重大更新

  1. 使用“npx npm-check-updates -u”。

  2. 'npm install' 将所有依赖项升级到最新的主要版本。

于 2020-10-30T08:09:40.327 回答
6

如果你不想安装全局npm-check-updates你可以简单地运行:

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()))"
于 2019-06-23T11:35:53.940 回答
5

上述命令是不安全的,因为您可能会在切换版本时破坏您的模块。相反,我推荐以下

  • npm shrinkwrap使用命令将实际的当前节点模块版本设置为 package.json 。
  • 如果它没有破坏您的测试,请使用https://github.com/bahmutov/next-update命令行工具将每个依赖项更新到最新版本
npm install -g 下次更新
// 从你的包中
下次更新
于 2014-11-02T16:43:23.000 回答
5

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

我做了什么:

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

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

于 2019-04-27T10:33:21.993 回答
5

如果您正在寻找不涉及安装 npm 包的更简单的解决方案,我会查看updatepackagejson.com

updatepackagejson.com

于 2020-09-28T00:10:50.710 回答
5

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

npm 更新--保存

于 2017-08-04T11:48:43.460 回答
4

以下代码(已被接受)给我写了“它需要太长时间等等”之类的东西,但什么也没做。可能使用全局标志是问题,idk。

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

我决定使用我的文本编辑器并遵循半手动方法。

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

"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. 点击“全部替换”。输出是这样的:

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 并按回车键。一切都升级了,工作正常。就这样。

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

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

于 2018-02-25T23:15:54.417 回答
3

我通过查看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
于 2018-05-22T14:17:11.140 回答
2

替代方案是

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

每次使用 npm update 时,它​​都会自动更新到最新版本。有关更多版本语法,您可以在这里查看:https ://www.npmjs.org/doc/misc/semver.html

于 2014-04-12T16:40:08.387 回答
2

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

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

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

然后运行npm update --save

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

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

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

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

例如删除node_modules/react-google-maps

终于又跑了npm update --save

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

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

于 2016-04-27T14:29:49.353 回答
2

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

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

绿卫PR 1 绿色守护者 PR 2

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

另一种选择是https://dependencyci.com/,但是我没有对其进行深入测试。乍看之下,Greenkeeper 在 IMO 总体上看起来更好,并且具有更好的集成性。

于 2017-01-08T23:22:08.280 回答
2

使用 NPM 脚本可以自动更新:

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i npm@latest -g",
        "npm-check-i-g": "npm i npm-check@latest -g",
        "eslint-i-g": "npm i eslint@latest -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

有关更多详细信息和分步手册:https ://stackoverflow.com/a/34295664

于 2019-02-17T19:46:32.937 回答
1
  • npm 已过时
  • npm 更新

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

于 2017-01-15T21:27:38.873 回答
0

The very easiest way to do this as of today is use pnpm rather than npm and simply type:

pnpm update --latest

https://github.com/pnpm/pnpm/releases/tag/v3.2.0

于 2019-04-29T15:23:26.127 回答