如何更新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-updates
或npm outdated
build议最新版本。
# `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" }
- 使用
*
作为最新版本的版本,包括unstable - 使用
latest
版本定义为最新的稳定版本 - 使用
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它是否匹配正确的文本。
用星号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会回滚其更改。
我非常喜欢npm-upgrade的工作原理。 这是一个简单的命令行实用工具,可以检查所有的依赖关系,并可以查看当前版本与最新版本的比较,并根据需要进行更新。
下面是在你的项目的根目录下运行npm-upgade
之后会发生什么情况的截图:
对于每个依赖项,您可以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 shrinkwrap
命令将实际当前节点模块版本设置为package.json。 - 将每个依赖关系更新到最新版本如果使用https://github.com/bahmutov/next-update命令行工具不打断您的testing
npm install -g next-update //从你的包里 下次更新
如果您使用npm 5和节点8,请尝试以下命令
npm更新 – 保存
如果您使用yarn
, yarn 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
-
delete
/node_modules
和package-lock.json (if you have any)
-
运行
npm update
。 这会将package.json更新到安装了依赖关系的最新版本。
仍然npm5
是越野车,将尽快解决
更新到最新版本。 你可以使用npm-check-updates
Greenkeeper,如果你使用Github。 https://greenkeeper.io/
这是一个Github集成,非常容易设置。 安装后,它会自动在您指定的存储库(或所有需要的)中创build请求,并始终保持您的代码始终保持最新,而不会强制您手动执行任何操作。 然后,PR应该触发一个CI服务的构build,并根据成功或失败的检查,你可以继续搞清楚什么是触发问题,或者当CI通过简单合并PR。
在底部,你可以看到第一次构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更新
应该为你的应用程序提供最新的通用版本。 但不是最新的版本。