升级至Angular 9+版本后出现ng-lz-string报错如何解决?
问题场景
将Angular应用从8版本升级至9.1.13版本时,执行如下升级命令:cmd /C "set "NG_DISABLE_VERSION_CHECK=1" && npx @angular/cli@9 update @angular/cli@9 @angular/core@9"
执行后控制台抛出peer依赖不兼容报错:Package "ng-lz-string" has an incompatible peer dependency to "zone.js" (requires "^0.8.4", would install "0.10.3")
当时的临时处理方案是在升级命令后追加--force标志,强制走完升级流程,后续再处理该依赖兼容问题,具体解决方法如下。
解决方案
- 升级适配版本的ng-lz-string
先确认ng-lz-string是否有适配Angular 9、兼容zone.js 0.10.x版本的正式发行版,有则直接执行安装命令升级到对应版本。升级完成后删除node_modules目录与当前包管理工具对应的lock文件(package-lock.json/yarn.lock/pnpm-lock.yaml),重新执行依赖安装命令,全量验证字符串压缩、解压相关功能无异常即可。 - 通过包管理工具覆写依赖版本
如果当前使用的ng-lz-string没有推出适配Angular 9的更新版本,可通过包管理工具的版本覆写能力,强制指定ng-lz-string依赖下的zone.js安装版本。经实际验证,zone.js 0.10.3不会破坏ng-lz-string的核心压缩解压能力,可正常使用。
不同包管理工具的配置方式如下:
npm 8.3及以上版本,在项目根目录的package.json中添加overrides字段:
Yarn环境在{ "overrides": { "ng-lz-string": { "zone.js": "0.10.3" } } }package.json中添加resolutions字段:
pnpm环境可在{ "resolutions": { "ng-lz-string/zone.js": "0.10.3" } }package.json中添加pnpm.overrides字段完成版本覆盖。配置完成后重新执行依赖安装命令即可消除该报错。 - 替换依赖自行封装能力
如果ng-lz-string已长期停止维护、无版本更新计划,可直接卸载该第三方包,安装原生lz-string库,自行封装Angular服务或通用工具方法实现字符串压缩、解压逻辑,从根源上规避第三方封装库带来的peer依赖冲突问题。
内容的提问来源于stack exchange,提问作者Michał Sawicki
相关产品推荐
相关产品推荐

