记taro3升级taro4中的问题

786 阅读4分钟

升级想法与流程

  1. taro有一个更新项目版本的命令,那么第一步直接使用命令去更新相关依赖

    pnpx @tarojs/cli update project

  2. 使用tarocli新建一个项目,将项目下面的所有依赖复制过来,再通过编辑器的重复提示,删除掉之前的重复依赖。这样做是为了一些运行时和最新版保持一致,避免花不必要时间的去查错。这样的话好像第一步也没有必要了😅

  3. ui库使用了nutui,找到2升3文档,先将相关配置更新到babel.config.js中。简单阅读了一下不兼容更新,觉得问题应该不大,等项目跑起来后如果有报错再改吧。先删掉依赖再重新装

  4. 还使用tailwindcss,所以找到taro4文档中相关的tailwindcss,这里有几项修改

    • @use 'tailwindcss/base' as *;代替原来的@import 'tailwindcss/base';写法。
    • config/indexwebpackChain这一项的修改
  5. 当然也需要全局搜索,在saas中使用@import都需要改为@use

  6. 项目启动后错误提示说明,这里用的Dart Sass 2.0.0,所以项目中所有在非cale中的计算都需要使用math.div来计算,下面给一个示例

    CleanShot 2025-06-29 at 00.22.53@2x.png

  7. 途中我也更新了pnpm,从9升级到10.12.4,在安装依赖的时候会有一个warn提示,大概意思是有一些依赖会创建脚本,需要手动的批准这些脚本,执行pnpm approve-builds,然后确认一下这些依赖。搜了一下,说是为了提高安全性。更新后会把这些依赖记录在pnpm-workspace.yaml中,以后重新安装依赖就不会再提示。所以项目有自动化进程的也不用担心

再记一个npm源带来的坑

项目提交钩子,在升级之前我从husky转成了lefthook,在package.json中有一个配置

"postinstall": "weapp-tw patch & lefthook install"

之前一直用的好好的,直到这次升级的时候,会一直给我报错

Cannot find module 'lefthook-darwin-arm64/bin/lefthook' in 1.11.14 for mac

于是去查了issue,找到了也有遇到同样问题的人,github.com/evilmartian…

issues中有解决方案,比如手动安装lefthook-darwin-arm64

这确实能解决问题,直到我发现我的package.json

"lefthook": "1.11.14",
"lefthook-darwin-arm64": "1.11.13"

我???

为什么版本不一样???

回到issues,继续往下翻,看见了一个好心人的解答

image.png

然后我使用nrm查了当的源,已经忘记什么时候用的taobao源了,然后又去npmmirror.com/package/lef… 查看镜像的版本,显示的最新就是1.11.13,于是我将源切回到npm的源,重新安装依赖就ok了。在网页中手动点了同步,没有截图到版本不一致的页面,在写文章的时候已经更新到了1.11.14了,还是就用npm源吧😀

CleanShot 2025-06-29 at 00.59.38@2x.png

最后

Q: taro4已经出了很久了,为什么现在才更新?

A: taro4刚出的时候他们的文档还没更新,此项目又是生产项目,并不想冒险。等到taro4文档更新后,我也没有找到官方文档中的升级指南。还有ui库用的nutui,刚出taro4的时候还是2.x版本,现在更新到3.x版本,于是就一起升级了。

Q: 中间有多个版本,会不会担心跨度大导致的兼容问题?

A: 虽然中间有多个版本,但是大版本升级只有一代,中间版本一般来说只修bug,优化,迭代功能,不会去弃用什么东西。如果有的话那就一步一个坑踩过来呗 还有就是平时工作量比较大,就不去折磨自己了,最近才比较空,有时间来搞这些玩意儿

Q: 不升级也能跑,为什么要升级?

A: 为了持续发展,这个项目会在未来几年都持续迭代版本,并且也是个人项目,所以开发也会一直是自己。虽然taro4主要更新的是对鸿蒙的支持,我想要的性能相关和微信小程序的skyline中的一些渲染bug并没有,但是为了长久的考虑,在有时间的情况下当然选择去更新。

吐槽

taro的issues有1.4k了,其中还有2年前的bug没有修。我觉得比较严重还是input框光标漂移不跟手的问题,只能自己去找办法规避

虽然还是希望框架能处理性能上面的问题,开发者只用专注于业务流程,但是想到taro需要兼容多个小程序,使用template确实需要更新多性能来更新页面

还是希望taro再努把力

对于在考虑用什么框架来做小程序的朋友们,如果只开发微信小程序,捞一手vue-mini