typescript版本与@types/lodash版本不兼容问题解决思路

一、发现问题

最近由于自行开发的组件库升级到tdesign-vue-next最新的版本,遇到了打包依赖版本不兼容问题。打包时控制台报错如下:

二、定位问题

1、肯定是lodash和typescript校验问题,那么实际是@types/lodash这个依赖和typescript问题

2、由于官方的UI库调整组件依赖 lodash 为 lodash-es从而导致组件库打包tsc命令无法通过。

三、分析问题

首先、应该检查两个包@types/lodash和typescript版本的兼容性。typescript得版本可能会影响类型的定义。@types/lodash的版本可能依赖于某个特定的typescript,我们的项目typescript是~4.5.5也就是4.5.x的版本。通常@types的包更新会跟随特定typescript版本。typescript又是会有破坏性的变更,比如4.5版本引入了某些新特性,或者修改了类型推断方式,这都可能导致旧的@types包不兼容。

四、解决问题

1、确定typescript与@types/lodash确实存在兼容性问题

2、查看node_modules中@types/lodash的版本

发现要求的typescript的版本是5.0+

而我们组件库依赖的typescript版本是~4.5.5

2、升级typescript得版本显然影响范围更大,成本更高,那就去降@types/lodash版本,问题是降到什么版本合适呢?

3、查看npm包我们会发现typescript版本是4.5+的版本号

4、于是乎去安装,按理说这个类型只用于打包时使用,安装到devDependencies即可

然后想象很美好,现实很骨感,发现如此打包还是报错

5、猜想有可能是安装第三方依赖包时,会自带这个依赖包从而导致版本被覆盖

这时候我们就要回忆一下npm的依赖解析机制了。当安装一个包时,如果该包的dependencies

或者devDependencies中声明了某个依赖,npm默认会尝试安装最新的兼容版本,但具体的行为取决于版本范围

如果本地已经有一个版本,新的安装包要求的版本与本地兼容则不会改变,否则不兼容,可能会安装另一个版本,导致node_modules中出现多个版本

6、查看tdesign-vue-next的package.json是否显示的依赖了特定的版本,是否与你本地的冲突

通过命令 npm view tdesign-vue-next dependencies验证td的依赖

很明显他确实固定了版本要求,而该版本要求typescript是5.0+与我们项目4.5.x冲突

7、固定本地的版本到dependecies中,如果是项目环境只需要放到devDependecies中,但是组件库又提供给第三方应用使用

所以应该固定到dependencies中,而事实证明,放到dependencies中组件库打包才不会报错,放到devDependencies则仍然报错

相关推荐
deli0072 小时前
Redis 缓存穿透、击穿、雪崩:9 组流量实测数据库怎么被打穿
前端
江华森2 小时前
5Mbps 小水管也能扛:K3s 上 k6 压测 + HPA 弹性伸缩实测
前端
shuangyueliao2 小时前
103 个小游戏的商店素材,我一张图都没手动做:截图 / 封面 / 打包 / 提审全自动
前端
ZhengEnCi2 小时前
前端项目为什么需要一份统一的 theme.css:用 CSS 变量管住全局样式与主题切换
前端·css·前端工程化
wordbaby2 小时前
一次微信小程序 `web-view` 跳转原生页回跳后 H5 白屏的排查与修复(Hash 路由污染)
前端
用户721880438352 小时前
密码骰子:结合AIUI在眼镜上生成一串16位密码
前端
江华森2 小时前
全链路可观测落地记:kube-prometheus-stack 在 K3s 上的 8 个坑与一整套修复脚本
前端
deli0072 小时前
27 寸 4K 开 125% 为什么发虚?PPI 和缩放一次算清
前端
广州华水科技3 小时前
当大坝面临风险时,如何有效实施单北斗GNSS变形监测?
前端
AiMan4 小时前
Poe还是不可以导出左侧所有对话,只能单条内容导出,方法不对吗
前端