Tarojs小程序开发:从2.x升级到3
小程序开发
浏览:667 次

原文
TarojsTarojs是由京东凹凸实验室开发的统一小程序开发框架,在微信、支付宝、百度、字节、H5、RN等平台上实现一次性编码和小程序。
自发布两年多以来,热度持续上升。20年的7月,3.0版被引入,这是该框架的一个重要升级。根据IT行业的传统做法,软件只有在发布到3.0版本时才真正成熟,Tarojs也不例外。
简单看一下3.0版和2.x版之间的区别,很明显3.0版不再是“寄生”在Reactjs上的补丁框架,它实现了从底层真正跨越框架的目标。开发人员可以无缝切换到React、Nerv、Vue、jQuery和其他JS框架,为用户提供最大程度的自由。
我也是Tarojs的深度用户。因为小程序开发的语法比较特殊,所以我为开发人员设置了很多限制,并且我习惯了React开发模式。我发现Taro可以开发一个基于Reactjs的跨平台框架,这自然是一个全面的支持。我在小程序开发的第一天使用了Tarojs框架。现在手头的工作也是在Tarojs升级到3.0之后,基于对3.0原理和机制的理解,将开发项目升级到2.0版本。
有关Taro3的具体新功能,请参阅[官方博客](https://aotu.io/notes/2020/06/30/taro-3-0-0/ )
2.x到3迁移
主要参考是官方的迁移指南(!https://taro-docs.jd.com/taro/docs/migration )
1.检查机器的当前taro版本>taro--版本
如果未安装或现有版本不高于3.0.0,则可以使用以下命令进行升级。
2.本地安装运行的Taro/cli升级官方命令是:
>npm i-g@tarojs/cli@next
然而,由于@next的存在,该命令仅升级到3.0.0-rc.6
现在您可以直接输入:
>npm i-g@tarojs/cli
升级至当前为3.0.2的最新版本
3.项目安装包升级
然后输入要升级的项目目录并升级安装包:
@tarojs/运行时
@芋头/迷你跑步者
@tarojs/组件
@芋头/芋头

@Tarojs/react--如果使用react
taro-ui@next--如果使用taro ui
反应
React dom——由taro ui使用
>npm i<上面的包>
为了安装最新版本,我偷了一个懒惰的工作,先打包。Json删除了相应依赖项中的所有@taroj。需要注意的是,taro ui也需要升级,否则会报告错误。
升级后,如果您不确定,可以输入:
>npm检查-u
将所有安装包升级到最新版本。
4.创建新的项目交叉引用。在taro/cli升级到3之后,您还可以输入
>taro初始化新app
创建一个新的空项目,然后打开包。json引用安装包的版本号
>npm i-D@tarojs/webpack运行程序
5.源代码迁移由于Taro3的最大变化独立于Reactjs,因此需要在相应的代码中添加和修改相应的导入,以确保React及其子组件能够正确引入。
基本上,它涉及
>从“@tarojs/taro”导入{Component,useState}
修改为
>从“react”导入{Component,useState}
先决条件是安装最新的react软件包。
6.Typescript支持如果它是由TS开发的,则需要修改tsconfig中的相应配置。json文件:
>“jsx”:“preserve”,
>“jsxFactory”:“Taro.createElement”,

修改为:
>“jsx”:“react”,
>“jsxFactory”:“React.createElement”,
7.在Jest异常更正升级到Taro3后,Jest测试意外停止。暴露了以下错误:
```
路径\of\app\node_modules\@tarojs\runtime\dist\runtime.esm.js:1
从“babel类型”导入{isBooleanLiteral};
^^^^^^
SyntaxError:无法在模块外部使用import语句
1|从“@tarojs/Taro”导入Taro;
| ^
2|//从“src/types/ars”导入{WxUserInfo,RegUser};
3|从“./rest”导入{userLogin};
4 |从“../libs/qqmap-wx-jssdk”导入QQMapWX;
运行时。_execModule(node_modules/jest runtime/build/index.js:1179:56)
位于对象。<匿名>(nodemodules/@tarojs/taro/nodemodules/@tarojs/api/dist/index.js:5:15)
位于对象。<匿名>(nodemodules/@tarojs/taro/index.js:1:14)
位于对象。<匿名>(src/controllers/users.ts:1:1)
位于对象。<匿名>(test/simple.test.js:1:36)
```
搜索Stackoverflow后,我们发现原因是:“一些库使用未编译的ES6代码”,而Jet需要编译这些代码才能运行”。
[Jest ES6代码导致导入语句错误](!https://stackoverflow.com/questions/55794280/jest