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

Rai*_*ere 1871 node.js npm

我从另一个项目中复制了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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我现在是npm-check-updates的合作者,这是解决这个问题的一个很好的解决方案.

jos*_*736 2236

看起来npm-check-updates是现在实现这一目标的唯一方法.

npm i -g npm-check-updates
ncu -u
npm install
Run Code Online (Sandbox Code Playgroud)

在npm <3.11:

只需将每个依赖项的版本更改为*,然后运行npm update --save.(注意: 最近(3.11)版本的npm中断了).

之前:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }
Run Code Online (Sandbox Code Playgroud)

后:

  "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"
  }
Run Code Online (Sandbox Code Playgroud)

当然,这是更新依赖关系的直言不讳.如果 - 正如你所说的那样 - 项目是空的,没有任何东西可以打破,这很好.

另一方面,如果您正在一个更成熟的项目中工作,您可能希望在升级之前验证依赖项中是否存在重大更改.

要查看哪些模块已过时,请运行npm outdated.它将列出任何已安装的具有较新版本的依赖项.

  • 有点老但可能对其他人有所帮助:https://github.com/tjunnone/npm-check-updates | 使用`npm install -g npm-check-updates`进行安装,然后使用`npm-check-updates`来检查你的依赖项是否有更新,使用`npm-check-updates -u`来更新你的package.json版本.然后它只是`npm install`,它将下载新版本. (119认同)
  • 我无法让它发挥作用.自从这个答案发布以来,npm有什么变化吗?当我使用通配符然后`npm install --save`时,通配符留在我的`package.json`中. (50认同)
  • 它看起来只更新package.json实际更新的包.我发现如果在运行命令之前删除了node_modules,它会按照原始答案中的描述执行. (30认同)
  • 不幸的是,对我来说,使用`update`也不起作用.我还留着通配符.是否有您所知道的关于此的文档,或者我可能会查看的任何其他资源? (14认同)
  • @thefourtheye:你通常不应该在package.json中留下*`*`,因为你最终可能会自动安装一个新的模块版本,其中包含破坏你应用的重大变化.由于我们在这里使用`--save`,`*`将替换为每个包的当前版本. (13认同)
  • 您的问题可能来自于您尝试通过键入`npm update --save`而不是`npm update --save-dev`来更新dev包. (5认同)
  • @Raine,这是第三方模块.虽然很有用,但我没有看到任何表明npm正式支持的内容. (5认同)
  • 提示:安装后将版本号如"~3.2.0"更改为"~3".这将允许次要版本和补丁更新(在[semver](http://semver.org)中向后兼容)并忽略主要版本更新(可能会破坏).'〜'的魔力! (2认同)
  • 删除`npm_modules`文件夹,以防你已经有更新版本(如果是这样的话会保留`*`) (2认同)
  • 如果您运行 npm &gt;= 5.2,您可以将 `npx npm-check-updates` 作为单个命令运行,而无需先全局安装 (2认同)
  • *选项对我不起作用。我强行将模块版本号更改为一个较小的数字,例如0.0.1,然后运行ncu -u并成功。 (2认同)

Eti*_*nne 987

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

请参阅https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 
Run Code Online (Sandbox Code Playgroud)

  • 这应该是通过npm命令本身本地提供的,实际上是迄今为止更新依赖关系的最佳解决方案. (124认同)
  • 本来应该是npm的一部分,完全同意.但事实并非如此,这种解决方案就像一件轻而易举的事.谢谢. (7认同)
  • `npx npm-check-updates -u` 是我的答案 (4认同)
  • @Batman是的,如果您之前没有安装过.否则使用npm update.ncu只是更新package.json.它不会安装或更新"node_modules". (3认同)
  • 我现在是`npm-check-updates`的合作者,可以全心全意地支持它. (2认同)
  • 我假设你的伙伴正在推动[HARD]将其纳入核心npm? (2认同)

Mic*_*ole 362

TLDR; (针对较新的NPM版本更新)

由于这些答案最初是写的,所以情况有所改变.

npm 2+: npm-check-updates+ npm outdated+npm-shrinkwrap.json

较旧的npm:npm shrinkwrap包+npm install

一定要收缩你的deps,否则你可能会结束一个死的项目.前几天我拿出了一个项目,它不会运行,因为我的deps已经过时/更新/乱七八糟.如果我收缩包裹,npm就会安装我需要的东西.


细节

对于那些做到这一点的好奇者来说,这就是我的建议:

使用npm-shrinkwrap.jsonnpm-shrinkwrap.json建议最新版本.


npm outdated
npm update
git commit package-lock.json
Run Code Online (Sandbox Code Playgroud)

然后做一个干净的安装(没有我有一些依赖警告)

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json
Run Code Online (Sandbox Code Playgroud)

最后,保存确切的版本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
Run Code Online (Sandbox Code Playgroud)

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

如果你检查npm installgit,所有安装将使用完全相同的版本.

这是一种从开发(所有更新,一直)转变为生产(没有人接触任何东西)的方法.

  • 这确实*不*回答问题.问题是如何更新*latest*版本.`npm update`只更新semver版本,而不是最新版本. (17认同)
  • 这是实际的正确答案.安装了几十个deps,这是一个更好的方法 (13认同)
  • 根据经验,总是一次更新所有包的建议可能很危险. (5认同)

lac*_*ass 187

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

npm install {package-name}@* {save flags?}
Run Code Online (Sandbox Code Playgroud)

npm install express@* --save
Run Code Online (Sandbox Code Playgroud)

供参考,npm-install


正如用户Vespakoen在拒绝编辑时指出的那样,也可以这样一次更新多个包:

npm install --save package-nave@* other-package@* whatever-thing@*
Run Code Online (Sandbox Code Playgroud)

他还基于的方式为shell选择了一个单行程npm outdated.请参阅编辑以获取代码和说明.


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

  • 这个解决方案很棒.无需安装任何新模块即可快速轻松地将单个软件包更新到最新版本.我喜欢npm-check-updates,但afaik它试图保持*all*包最新,这并不总是你想要的. (8认同)
  • 使用“npm outdated -l”显示每个包是依赖项还是 devDependency。使用 `npm install --save-dev` 保存为 devDependency。 (2认同)
  • 我只是使用了类似的东西,可能来自最近的文档......使用“最新”而不是“*”`npm install {package-name}@latest {save flags}` (2认同)
  • 非常感谢,这个解决方案很棒,正是我正在寻找的。它允许您更新特定的包,而无需更新可能导致无法预料的问题的所有其他依赖项! (2认同)

Gol*_*Jer 83

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

版本Lense

在此输入图像描述

  • 工作得很漂亮,如果不清楚任何人,这只是检查package.json中的版本与最新的npm存储库版本,并允许您单击版本来更新package.json中的文本内容.然后,您需要运行"npm update"告诉npm安装新版本. (3认同)
  • 这里有崇高的文字3版本:https://github.com/yavorsky/Bump,虽然有点慢. (2认同)
  • 请注意,通过将鼠标悬停在包条目上,可以在Visual Studio内置代码中查看包依赖关系的最新版本:[内置包版本提示](https://postimg.cc / image / 538xikwgb /) (2认同)
  • 请注意,单击代码镜头链接时它不会自动安装软件包!它只是更新 package.json 版本文本。 (2认同)

Tob*_*nik 56

这适用于npm 1.3.15.

"dependencies": {
  "foo": "latest"
}
Run Code Online (Sandbox Code Playgroud)

  • 很高兴知道.我的猜测是,这在任何生产网站上通常都是不好的做法,因为它会自动更新为可能向后兼容的版本.'~2'语法将您锁定到给定的主要版本号,后面的[semver](http://semver.org/)将向后兼容. (10认同)
  • 我喜欢和`npm shrinkwrap`一起使用来冻结deps. (5认同)

Mr.*_*Lin 48

  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"
},
Run Code Online (Sandbox Code Playgroud)

  • 并且不要忘记npm update --save (3认同)
  • 这是最好的答案。 (3认同)

Tyl*_*vis 38

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

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

正如Etienne所述:安装并运行:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
Run Code Online (Sandbox Code Playgroud)

  • `npm install`之前的`rm -rf node_modules`为我删除了一些依赖警告. (3认同)

Ste*_*pUp 37

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

npm outdated
Run Code Online (Sandbox Code Playgroud)

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

npm install yourPackage@latest --save
Run Code Online (Sandbox Code Playgroud)

例如:

我的package.json文件有依赖:

"@progress/kendo-angular-dateinputs": "^1.3.1",
Run Code Online (Sandbox Code Playgroud)

那我应该写:

npm install @progress/kendo-angular-dateinputs@latest --save
Run Code Online (Sandbox Code Playgroud)


man*_*ito 32

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

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

npm升级示例

对于每个依赖项,您可以选择升级,忽略,查看更改日志或完成该过程.到目前为止,它对我来说非常有用.

编辑:要清楚这是一个需要在命令工作之前安装的第三方软件包.npm本身没有:

npm install -g npm-upgrade
Run Code Online (Sandbox Code Playgroud)

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

npm-upgrade
Run Code Online (Sandbox Code Playgroud)

  • 是的,刚刚提到别人.没有抱怨答案:) (2认同)
  • 嗯,`npm-upgrade`对我不起作用,但`npm upgrade`做了,它更新了我的package.json文件,这正是我想要的. (2认同)
  • 您还可以将其与 npx 一起使用:`npx npm-upgrade` - 非常酷!:) (2认同)

Mad*_*eka 29

安全更新

  1. 用于npm outdated发现过期的依赖项。

  2. 用于npm update执行安全的依赖项升级。

  3. 用于npm install <packagename>@latest升级到软件包的最新主要版本。

重大更新

  1. 使用npx npm-check-updates -u

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

  • 答案中列出的命令不正确并且会出错。请注意,“npm install @latest”实际上应该是“npm install &lt;PACKAGE&gt;@latest”。 (2认同)

dan*_*lmb 21

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

语义版本正则表达式

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
Run Code Online (Sandbox Code Playgroud)

如何使用

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

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

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

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

用星号替换所有匹配项.

screenshot:用星号替换包版本

npm update --save


and*_*xyz 14

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

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev
Run Code Online (Sandbox Code Playgroud)

这里的想法:要将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)

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

之后,我检查一切都很简单

npm outdated --depth=0
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用以下方法检查当前的顶级已安装库版本

npm list --depth=0
Run Code Online (Sandbox Code Playgroud)


Sib*_*raj 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


TWr*_*ght 13

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

它不是锤子,而是为您提供更多相关的依赖关系更新知识和控制权.

为了让您体验一下这里的等待截图(从npm-check的git页面中删除):

在此输入图像描述


fot*_*ijr 11

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

yarn upgrade --latest

从他们的文档

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

  • 不更新 `package.json` 中的依赖项 - https://github.com/yarnpkg/yarn/issues/4390 (2认同)

ily*_*kam 11

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

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

npx npm-check-updates -u && npm i
Run Code Online (Sandbox Code Playgroud)


Dav*_*aun 10

Updtr!

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

https://github.com/peerigon/updtr


gok*_*sel 10

npm-check用来归档这个.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一个有用的命令列表,它将保留精确的版本号 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
Run Code Online (Sandbox Code Playgroud)

  • `yarn Upgrade-interactive --latest` 现在是一个更好的选择 (3认同)

Yan*_*Tay 8

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

使用纱线的更多理由npm.嘿.

  • 不更新 `package.json` 中的依赖项 - https://github.com/yarnpkg/yarn/issues/4390 (2认同)

Ogg*_*las 8

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

npm install -g npm-check-updates
ncu -a
npm install
Run Code Online (Sandbox Code Playgroud)

背景:

我正在使用来自@ 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
Run Code Online (Sandbox Code Playgroud)


小智 7

我通过使用npm-check-updates的说明解决了这个问题:

npm install -g npm-check-updates
ncu
ncu -u # To update all the dependencies to the latest
ncu -u "specific module name"  # In case you want to update specific dependencies to the latest
Run Code Online (Sandbox Code Playgroud)


kru*_*hah 6

如果您使用的是 npm 5 和 Node.js 8,请尝试以下命令:

npm update --save
Run Code Online (Sandbox Code Playgroud)

  • “update”命令似乎没有使依赖关系超出原始定义。如果 `package.json` 完全声明了 `"1.2.3"`,您将不会得到 `1.2.4`。这可能是好事,也可能是坏事:) (3认同)

hus*_*ayt 6

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

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

最近我一直在使用taze

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


小智 5

上述命令不安全,因为切换版本时可能会破坏模块.相反,我推荐以下内容

  • 使用npm shrinkwrap命令将实际当前节点模块版本设置为package.json .
  • 将每个依赖项更新到最新版本如果它没有使用https://github.com/bahmutov/next-update命令行工具打破您的测试
npm install -g next-update
// from your package
next-update


miq*_*qrc 5

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

我做了什么:

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

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


Yuk*_*élé 5

如果你不想安装全局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()))"
Run Code Online (Sandbox Code Playgroud)


小智 5

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

updatepackagejson.com


归档时间:

查看次数:

825323 次

最近记录:

5 年,9 月 前