我从另一个项目中复制了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"
}
}
我现在是npm-check-updates的合作者,这是解决这个问题的一个很好的解决方案 .
30 回答
https://www.npmjs.com/package/npm-check-updates
npm-check-updates允许您将package.json依赖项升级到最新版本,而不管现有的版本限制 .
依赖关系已更新!就这样!
Updtr!
https://github.com/peerigon/updtr
如果使用npm 5和节点8,请尝试以下命令
npm update --save
看起来npm-check-updates是现在实现这一目标的唯一方法 .
在npm <3.11:
只需将每个依赖项的版本更改为
*
,然后运行npm update --save
. ( Note: broken in recent (3.11) versions of npm) .之前:
后:
当然,这是更新依赖关系的直言不讳 . 如果 - 正如你所说的那样 - 项目是空的,没有任何东西可以打破,这很好 .
另一方面,如果您正在一个更成熟的项目中工作,您可能希望在升级之前验证依赖项中是否存在重大更改 .
要查看哪些模块已过时,只需运行npm outdated . 它将列出任何已安装的具有较新版本的依赖项 .
要查看哪些软件包具有更新的版本,请使用以下命令:
只更新 one 依赖只需使用以下命令:
例如:
我的
package.json
文件具有依赖性:那我应该写:
回复非常晚 . 但可以帮助别人 .
此功能已在
npm v5
中引入 . 使用npm install -g npm@latest
和更新到npm更新
package.json
删除
/node_modules
和package-lock.json (if you have any)
运行
npm update
. 这将基于semver将依赖关系package.json更新为最新版本 .更新到最新版本 . 你可以去
npm-check-updates
我必须用于更新
package.json
forNPM 3.10.10
的命令:背景:
我正在使用来自@ josh3736的最新命令,但我的
package.json
没有更新 . 然后我在运行npm-check-updates -u
时注意到了描述文本:阅读npm-check-updates的文档,您可以看到差异:
https://www.npmjs.com/package/npm-check-updates
ncu是
npm-check-updates
的别名,如输入npm-check-updates -u
时在消息中看到的:TLDR; (针对较新的NPM版本更新)
事情已经发生了一些变化,因为这些答案最初是写的 .
npm 2:npm过时npm update npm shrinkwrap
较旧的npm:npm-check-updates包npm shrinkwrap
一定要收缩你的deps,否则你可能会结束一个死的项目 . 我前几天拿出了一个项目而且它不会运行,因为我的deps已经过时/更新/乱七八糟 . 如果我收缩包装,npm就会安装我需要的东西 .
详情
对于那些做到这一点的好奇者,我推荐这里:
使用npm-check-updates或npm已过时以建议最新版本 .
然后进行全新安装(没有我有一些依赖警告)
最后,使用npm shrinkwrap将精确版本保存到npm-shrinkwrap.json
现在,npm install现在将在npm-shrinkwrap.json中使用精确版本
如果你检查
npm-shrinkwrap.json
到git,所有安装将使用完全相同的版本 .这是一种从开发过渡(所有更新,一直)到 生产环境 (没有人接触任何东西)的方法 .
npm outdated
npm-check-updates
npm shrinkwrap
我使用
npm-check
来存档 .另一个有用的命令列表,它将保留
package.json
中的确切版本号我真的很喜欢npm-upgrade的作品 . 它是一个简单的命令行实用程序,它遍历所有依赖项,并允许您查看当前版本与最新版本的比较,并根据需要进行更新 .
以下是在项目根目录(
package.json
文件旁边)中运行npm-upgrade
后发生的情况的屏幕截图:对于每个依赖您可以选择升级,忽略,查看更改日志或完成此过程 . 到目前为止,它对我来说非常有用 .
Solution without additional packages
将每个依赖项的版本更改为
*
:然后运行
npm update --save
.你的一些软件包已更新,但有些不是?
这是棘手的部分,这意味着你的本地版本“反应”低于最新版本 . 在这种情况下,npm下载并更新了“react”包 . 但是,您当地版本的“react-google-maps”与最新版本相同 .
如果您仍希望"update"未更改
*
,则必须从node_modules
文件夹中删除这些模块 .例如删除
node_modules/react-google-maps
.终于再次运行
npm update --save
.如果要更新开发依赖项,请不要忘记运行
npm update --save-dev
.Ncu是检查更新的新别名 . 通过这样做,您不必手动更新package.json中的版本号.ncu为您做到了 . 如果您使用的是Linux计算机,请按照以下方法操作
我通过查看https://github.com/tjunnone/npm-check-updates的说明解决了这个问题
替代方案是
每次使用npm update时,它都会自动更新到最新版本 . 有关更多版本的语法,您可以在此处查看:https://www.npmjs.org/doc/misc/semver.html
这适用于npm 1.3.15 .
如果您碰巧使用Visual Studio Code作为您的IDE,这是一个有趣的小扩展,可以一键更新
package.json
.版本Lense
以下代码(已被接受)给我写了一些类似“它需要太长时间的等等”并且什么也没做 . 可能使用全球旗帜是问题,idk .
我决定使用我的文本编辑器,而是采用半手动方法 .
我从我的
package.json
的dev依赖项复制了一个这样的列表(只是更长)到记事本文本编辑器:我将搜索模式设置为正则表达式,使用
^\s*"([^"]+)".*$
模式获取包名称并将其替换为npm uninstall \1 --save-dev \nnpm install \1 --save-dev
. 单击"replace all" . 输出是这样的:我把它复制回bash并点击回车 . 一切都升级,工作正常 . 就这样 .
我不认为这是一个大问题,因为你必须时不时地做,但你可以轻松编写一个脚本,解析
package.json
并升级你的包 . 我认为这样做更好,因为如果你需要特殊的东西,你可以编辑你的列表,例如保留当前版本的lib .如果您使用
yarn
,yarn upgrade-interactive是一个非常时尚的工具,可以让您查看过时的依赖项,然后选择您要更新的依赖项 .使用Yarn的更多理由超过
npm
. 嘿 .要将 one 依赖项更新为其最新版本而无需手动打开
package.json
并进行更改,您可以运行即
供参考,npm-install
正如用户Vespakoen在拒绝编辑时指出的那样,也可以通过这种方式一次更新多个包:
他还根据
npm outdated
为shell选择了一个单行程 . 有关代码和说明,请参阅the edit .PS:我也讨厌为这样的事情手动编辑
package.json
;)Greenkeeper如果你正在使用Github . https://greenkeeper.io/
这是一个Github集成,非常容易设置 . 安装后,它会自动在您指定的存储库中创建拉取请求(或者如果需要,则自动创建拉取请求),并使代码始终保持最新,而不必强制您手动执行任何操作 . 然后PR应该触发CI服务的构建,并且根据成功或失败的检查,您可以继续确定触发问题的原因或CI通过时只是合并PR .
在底部,您可以看到第一个构建首先失败并且在提交之后(“升级到节点v6.9”)测试通过,所以我最终可以合并PR . 也有许多表情符号 .
另一种选择是https://dependencyci.com/,但我没有对其进行密集测试 . 在第一次看之后,Greenkeeper在一般的IMO中看起来更好,并且具有更好的集成 .
这是我将
package.json
中的所有依赖项更新为最新版本所做的操作:一个简单的步骤:
npm已过时
npm更新
应该为您提供与您的应用程序兼容的最新通缉版本 . 但不是最新版本 .
使用
*
作为最新版本的版本,包括unstable使用
latest
作为最新稳定版本的版本定义使用LatestStablePackages修改package.json,其中包含最新的稳定版本号
这是一个例子:
上述命令不安全,因为切换版本时可能会破坏模块 . 相反,我推荐以下内容
使用
npm shrinkwrap
命令将实际当前节点模块版本设置为package.json .将每个依赖项更新到最新版本如果它不使用https://github.com/bahmutov/next-update命令行工具打破您的测试
npm-check-updates
是一个实用程序,可以使用所有依赖项的最新版本自动调整package.json见https://www.npmjs.org/package/npm-check-updates
我发现上面最好的答案唯一的警告是它将模块更新到最新版本 . 这意味着它可以更新为不稳定的alpha版本 .
我会使用npm-check-updates实用程序 . 我的小组使用了这个工具,它通过安装稳定的更新有效地工作 .
正如Etienne所说:安装并运行:
如果使用yarn,则以下命令将所有包更新为其最新版本:
yarn upgrade --latest
从他们的docs:
这是一个匹配语义版本号的基本正则表达式,因此您可以使用星号快速替换它们 .
语义版本正则表达式
如何使用
在JSON文件中选择要替换的软件包版本 .
输入上面的正则表达式并验证它是否与正确的文本匹配 .
用星号替换所有匹配项 .
运行
npm update --save
我最近不得不更新几个使用npm和package.json作为gruntfile.js魔法的项目 . 以下bash命令(多行命令)对我很有用:
这里的想法:将
npm outdated
输出作为json传递给jq
(jq是一个json命令行解析器/查询工具)
(注意
npm outdated
的--depth
参数的使用)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
安装了它)注意:我只使用
--save-dev
将更新的库保存到json keydevDependancies
内的package.json中,这是我的项目的要求,很可能不是你的 .之后我会检查一切都很简单
此外,您可以使用以下方法检查当前的顶级已安装库版本