如何更新npm安装的包所依赖的子包版本?
问题原因
你遇到的情况是npm的锁文件机制导致的:appium 1.22.0版本发布时,官方会将当时所有符合依赖版本要求的依赖版本写入包自带的npm-shrinkwrap.json文件中,用户安装该版本appium时,npm默认会优先使用锁文件中固定的依赖版本,而非拉取当前npm仓库中符合版本范围的最新依赖,所以才会出现即使依赖范围是^1.0.0,也无法安装到1.50.1版本的情况。
解决方案
不需要等待appium官方发布新版本,可通过以下任意一种方法更新依赖:
- 方案1:使用npm overrides强制指定版本(适用于npm v8.3.0及以上版本,推荐)
在你项目的package.json里加入overrides配置:
配置完成后执行{ "overrides": { "appium": { "appium-espresso-driver": "1.50.1" } } }npm install即可,npm会强制把appium依赖的appium-espresso-driver版本替换为你指定的1.50.1,配置会持久化生效,后续重新安装也会自动应用指定版本。 - 方案2:手动安装指定版本依赖
先正常安装appium,再执行单独安装命令:
安装完成后,node_modules里的appium-espresso-driver版本就会更新到1.50.1,只要该版本符合^1.0.0的语义化版本要求,不会出现兼容性问题。npm install appium-espresso-driver@1.50.1 - 方案3:安装时忽略锁文件(适用于全局安装appium的场景)
安装时添加--no-shrinkwrap参数,忽略appium包自带的锁文件,直接拉取所有符合语义化版本要求的最新依赖:
该方法可以一次性更新所有appium的依赖到符合版本要求的最新版本,无需单独指定每个依赖的版本。npm install -g appium@1.22.0 --no-shrinkwrap
内容的提问来源于stack exchange,提问作者Baterka
相关产品推荐
相关产品推荐

