【HarmonyOS】鸿蒙应用安装三方包后,为什么每次同步更新都会将三方包更新成最新版本?

发布时间 2023-12-18 14:36:32作者: Mayism123
【关键字】

鸿蒙应用三方包安装,ohpm三方包安装

 

【问题详情】

进行鸿蒙应用开发时,我们经常会通过ohpm命令安装三方包实现某些功能,但是可能会存在这种情况:当三方包发布新版本后,点击同步工程,会出现默认更新安装的三方包版本情况;但是因为功能版本兼容问题,我们往往不想升级版本,本篇文章介绍为什么会出现此类问题并如何规避解决。此处以API9 Stage模型HarmonyOS应用,@ohos/zxing三方包为例进行说明。

 

【问题复现】

第一步:在API9 Stage模型的工程中,在Terminal中通过如下命令安装2.0.0版本的@ohos/zxing三方包,执行成功后

1)工程oh-package.json5文件中默认添加依赖,并在oh_modules中生成对应三方包目录,查看版本为2.0.0;

ohpm i @ohos/zxing@2.0.0

cke_12571.png​​

2)在工程级oh-package-lock.json5中可以看到安装了2.0.0版本@ohos/zxing:

cke_13917.png​​

第二步:由于oh-package-lock.json5文件与oh_modules目录都是自动生成的,通常我们不会将其提交到代码仓中保存,而是通过oh-package.json5文件生成,因此若我们更新项目(此时可能没有oh-package-lock.json5文件与oh_modules目录)或者手动删除oh-package-lock.json5文件后,重新点击【File-Sync and Refresh Project】同步工程,会发现@ohos/zxing三方包依赖版本变高了,重新生成的oh-package-lock.json5和oh_modules中版本如下所示:

cke_2787.png

cke_15314.png​​

cke_16739.png​​

但是我们并不想更新三方依赖版本,因为新版本可能存在功能适配问题,这无形中可能会导致功能无法使用,如何规避这个问题,导致问题原因是什么?

 

【问题分析解决】 

问题发生原因:使用ohpm命令安装指定版本或当时最新版本时,oh-package.json5文件中生成依赖会默认带^符号,此符号表示“次版本和补丁版本可增”,保持主版本(即版本号第一位数字2)不变情况下,次版本号(即版本号第二位数字0)和补丁版本号(即版本号第三位数字0)可以大于等于0,因此若三方包发布了新版本且版本号满足上述条件,oh-package-lock.json并未锁定版本情况下,同步工程中依赖会默认更新三方包版本。

cke_5732.png

问题规避:

由于目前DevEco Studio开发鸿蒙应用,使用ohpm install命令安装三方包会自动添加符号^,因此可以采取如下方式规避:

方式1:每次安装三方包之后,将oh-package.json5中^符号手动去除,这样保证安装固定版本的三方包;

方式2:不通过ohpm install命令安装三方包,直接在oh-package.json5文件中通过代码添加依赖,同样固定版本号,然后再点击右上角【Sync Now】同步工程依赖。

这样依赖包将固定具体版本且不会更新。

cke_7763.png

 

【说明】

只有oh-package-lock.json5中并未锁定三方依赖版本时,重新同步刷新工程才会更新依赖版本,即oh-package-lock.json5不存在时会根据oh-package.json配置的依赖重新更新下载三方包,若本地已通过oh-package-lock.json5文件锁定某个具体版本,同步更新工程则不会更新。

 

【参考文档】

依赖包版本符号介绍(npm与ohpm相同):https://blog.51cto.com/u_15127697/3633383