如何更新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" } } 

我现在是npm-check-updates的合作者,这是一个很好的解决scheme。

看起来像npm-check-updates是现在做到这一点的唯一方法。

 npm i -g npm-check-updates npm-check-updates -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" } 

当然,这是更新依赖关系的钝器。 如果像你所说的那样,这个项目是空的,没有什么可以打破的。

另一方面,如果您正在开发一个更成熟的项目,那么在升级之前,您可能需要validation依赖关系中没有发生重大更改。

要查看哪些模块已过时,只需运行npm outdated 。 它将列出具有新版本的已安装依赖关系。

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

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

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

TLDR; (更新为新的NPM版本)

由于这些答案是最初编写的,所以事情有所改变。

npm 2+: npm outdated + npm update + npm shrinkwrap

较老的npm: npm-check-updates包+ npm shrinkwrap

一定要收缩包装,否则你可能会结束一个死的项目。 我有一天拿出一个项目,它不会运行,因为我的代价都过时了/更新/一塌糊涂。 如果我收缩包装,npm将会安装我所需要的。


细节

对于这个好奇的人来说,这是我推荐的:

使用npm-check-updatesnpm outdatedbuild议最新版本。

 # `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 

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

 $ 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中,所有安装将使用完全相同的版本。

这是从开发(所有更新,所有时间)转换到生产(没有人接触)的一种方式。

  • npm过时了

  • NPM-检查更新function

  • npm收缩包装

要将一个依赖关系更新到最新版本,而无需手动打开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为基础,提出了一个简单的npm outdated的shell npm outdated 。 请参阅编辑代码和说明。


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

这在npm 1.3.15中起作用。

 "dependencies": { "foo": "latest" } 
  1. 使用*作为最新版本的版本,包括unstable
  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 

如果你碰巧使用Visual Studio Code作为你的IDE,这是一个有趣的小扩展,使更新package.json一个单一的过程。

版本Lense

在这里输入图像说明

这是一个基本的正则expression式来匹配语义版本号,所以你可以用星号来快速replace它们。

语义版本正则expression式

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

如何使用

在JSON文件中select要replace的软件包版本。

屏幕截图:选择您想要替换的文字

input上面的正则expression式,并validation它是否匹配正确的文本。

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

用星号replace所有匹配。

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

运行npm update --save

我最近不得不更新几个使用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命令行parsing器/查询工具)
(注意使用npm outdated--depth参数)
jq只会将输出剥离到只有顶层包名称。
最后xargs将每个LIBRARYNAME一次放入一个npm install LIBRARYNAME --save-dev命令

以上是我在一台机器上runnning的工作: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

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

之后,我检查一切都是简单的肉汁

 npm outdated --depth=0 

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

 npm list --depth=0 

Updtr!

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

https://github.com/peerigon/updtr

我非常喜欢npm-upgrade的工作原理。 这是一个简单的命令行实用工具,可以检查所有的依赖关系,并可以查看当前版本与最新版本的比较,并根据需要进行更新。

下面是在你的项目的根目录下运行npm-upgade之后会发生什么情况的截图:

npm升级例子

对于每个依赖项,您可以select升级,忽略,查看更新日志或完成该过程。 到目前为止,它对我来说非常棒。

我使用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 

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

 npm install -g next-update
 //从你的包里
下次更新

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

npm更新 – 保存

如果您使用yarnyarn upgrade-interactive是一个非常stream畅的工具,可以让您查看您的过时的依赖关系,然后select要更新哪些。

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

一个简单的步骤:

 $ npm install -g npm-check-updates && ncu -a && npm i 

另一种是

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

每次使用npm更新时,都会自动更新到最新版本。 对于更多的版本语法,你可以在这里查看: https : //www.npmjs.org/doc/misc/semver.html

解决scheme没有额外的包

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

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

然后运行npm update --save

你的一些软件包已经更新,但有些不是?

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

这是棘手的部分,这意味着你的本地版本的“反应”比最新版本低。 在这种情况下,npm下载并更新“反应”包。 然而,您的本地版本的“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

一个非常迟的答复。 但可能会帮助某人。

这个特性已经在npm v5引入了。 使用npm install -g npm@latest和更新到npm

更新package.json

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

  2. 运行npm update 。 这会将package.json更新到安装了依赖关系的最新版本。

仍然npm5是越野车,将尽快解决

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

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

这是一个Github集成,非常容易设置。 安装后,它会自动在您指定的存储库(或所有需要的)中创build请求,并始终保持您的代码始终保持最新,而不会强制您手动执行任何操作。 然后,PR应该触发一个CI服务的构build,并根据成功或失败的检查,你可以继续搞清楚什么是触发问题,或者当CI通过简单合并PR。

绿色PR 1 绿色PR 2

在底部,你可以看到第一次构build失败,一旦提交(“升级到节点v6.9”)testing通过,所以我可以最终合并公关。 也有很多表情符号。

另一个select是https://dependencyci.com/ ,但是我没有深入地testing。 经过第一次看,绿色海员看起来更好一般海事组织,并有更好的整合。

这是我所做的更新package.json所有依赖关系到最新的:

 npm install -g npm-check-updates ncu -u --packageFile package.json 

Ncu是检查更新的新别名。 通过这样做,你不必手动更新package.json中的你的版本号。 如果您在Linux机器上,请遵循以下方法

 sudo npm i -g npm-check-updates ncu ncu -a // to update your package.json sudo npm install 

我必须使用的命令来更新NPM 3.10.10 package.json

 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是在inputnpm-check-updates -u时在消息中看到的npm-check-updates的别名。

 [INFO]: You can also use ncu as an alias 
  • npm过时了
  • npm更新

应该为你的应用程序提供最新的通用版本。 但不是最新的版本。