【HarmonyOS】鸿蒙应用安装三方包后,为什么每次同步更新都会将三方包更新成最新版本?
鸿蒙应用三方包安装,ohpm三方包安装
【问题详情】
进行鸿蒙应用开发时,我们经常会通过ohpm命令安装三方包实现某些功能,但是可能会存在这种情况:当三方包发布新版本后,点击同步工程,会出现默认更新安装的三方包版本情况;但是因为功能版本兼容问题,我们往往不想升级版本,本篇文章介绍为什么会出现此类问题并如何规避解决。此处以API9 Stage模型HarmonyOS应用,@ohos/zxing三方包为例进行说明。
【问题复现】
第一步:在API9 Stage模型的工程中,在Terminal中通过如下命令安装2.0.0版本的@ohos/zxing三方包,执行成功后
1)工程oh-package.json5文件中默认添加依赖,并在oh_modules中生成对应三方包目录,查看版本为2.0.0;
2)在工程级oh-package-lock.json5中可以看到安装了2.0.0版本@ohos/zxing:
第二步:由于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中版本如下所示:
但是我们并不想更新三方依赖版本,因为新版本可能存在功能适配问题,这无形中可能会导致功能无法使用,如何规避这个问题,导致问题原因是什么?
【问题分析解决】
问题发生原因:使用ohpm命令安装指定版本或当时最新版本时,oh-package.json5文件中生成依赖会默认带^符号,此符号表示“次版本和补丁版本可增”,保持主版本(即版本号第一位数字2)不变情况下,次版本号(即版本号第二位数字0)和补丁版本号(即版本号第三位数字0)可以大于等于0,因此若三方包发布了新版本且版本号满足上述条件,oh-package-lock.json并未锁定版本情况下,同步工程中依赖会默认更新三方包版本。
问题规避:
由于目前DevEco Studio开发鸿蒙应用,使用ohpm install命令安装三方包会自动添加符号^,因此可以采取如下方式规避:
方式1:每次安装三方包之后,将oh-package.json5中^符号手动去除,这样保证安装固定版本的三方包;
方式2:不通过ohpm install命令安装三方包,直接在oh-package.json5文件中通过代码添加依赖,同样固定版本号,然后再点击右上角【Sync Now】同步工程依赖。
这样依赖包将固定具体版本且不会更新。
【说明】
只有oh-package-lock.json5中并未锁定三方依赖版本时,重新同步刷新工程才会更新依赖版本,即oh-package-lock.json5不存在时会根据oh-package.json配置的依赖重新更新下载三方包,若本地已通过oh-package-lock.json5文件锁定某个具体版本,同步更新工程则不会更新。
【参考文档】
依赖包版本符号介绍(npm与ohpm相同):https://blog.51cto.com/u_15127697/3633383