当前位置: 首页 > news >正文

多端统一开发解决方案---Taro

Taro 一套代码,多端运行,释放双手的摸鱼神器

在这里插入图片描述

文章目录

    • Taro 一套代码,多端运行,释放双手的摸鱼神器
    • 1. 简介
    • 2. 准备工作
      • 2.1 安装及使用
        • 2.1.1 开发者工具
        • 2.1.2 tarojs
          • 2.1安装tarojs工具
    • 3. Taro 使用
    • 4.限制
    • 5.路由跳转汇总
    • 6.注意事项
    • 7.分享
    • 8.Taro 的原理
      • 1.抹平多端差异
    • 9 . 上线流程
    • 10.开发过程中遇到的问题

Taro 多端统一开发解决方案。一套代码,多端运行,成本低、效率高,意想不到的丝滑。

1. 简介

Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发 微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 / RN 等应用

现如今市面上端的形态多种多样,针对不同的端去编写多套代码的成本显然非常高,只编写一套代码就能够适配到多端的能力就显得极为需要。

2. 准备工作

  • 注册小程序(公司账号管理者),管理=>成员管理模块添加开发者微信号;
  • 获取appid :开发=>开发管理=>开发设置模块获取appid,appSecret
  • 服务器域名:开发=>开发管理=>开发设置下面的服务器域名配置对应的(域名只支持 https (wx.request、wx.uploadFile、wx.downloadFile) 和 wss (wx.connectSocket) 协议)

2.1 安装及使用

(node环境>=12.0.0)

2.1.1 开发者工具

工具介绍-> https://developers.weixin.qq.com/miniprogram/dev/devtools/nightly.html

注:使用的是wechat_devtools_1.05.2107090_x64.exe,调试器空白,改用wechat_devtools_1.05.2108052_x64.exe

2.1.2 tarojs

2.1安装tarojs工具
1.`npm install -g @tarojs/cli `    

2. 初始化(使用命令模板创建项目)  

	`taro init myApp` 

3. 编译运行:

	`npm run dev:weapp`

	`npm run build:weapp`

注:使用Taro 的build命令可以把Taro代码编译成不同端的代码,然后在对应的开发工具中查看效果

4.打开微信开发者工具,选择项目根目录打开

3. Taro 使用

1.目录结构:

├── dist                        编译结果目录
|
├── config                      项目编译配置目录
|   ├── index.js                默认配置
|   ├── dev.js                  开发环境配置
|   └── prod.js                 生产环境配置
|
├── src                         源码目录
|   ├── pages                   页面文件目录
|   |   └── index               index 页面目录
|   |       ├── index.js        index 页面逻辑
|   |       ├── index.css       index 页面样式
|   |       └── index.config.js index 页面配置
|   |
|   ├── app.js                  项目入口文件
|   ├── app.css                 项目总通用样式
|   └── app.config.js           项目入口配置
|
├── project.config.json         微信小程序项目配置 project.config.json

├── project.tt.json             字节跳动小程序项目配置 project.tt.json
├── project.swan.json           百度小程序项目配置 project.swan.json
├── project.qq.json             QQ 小程序项目配置 project.config.json
|
├── babel.config.js             Babel 配置
├── tsconfig.json               TypeScript 配置
├── .eslintrc                   ESLint 配置
|
└── package.json

在这里插入图片描述

在这里插入图片描述

注:tabBar图标:背景透明,而且icon要小于81*81

4.限制

1.由于小程序不支持动态引入,因此小程序中无法使用 React.lazy API

2.不能在页面组件的 DOM 树之外插入元素,因此不支持

3.所有组件的 id 必须在整个应用中保持唯一(即使他们在不同的页面),否则可能导致事件不触发的问题

5.路由跳转汇总

1.Taro.reLaunch关闭所有页面,打开到应用内的某个页面

2.Taro.switchTab 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

3.Taro.redirectTo关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面

4.Taro.navigateTo保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 Taro.navigateBack 可以返回到原页面。小程序中页面栈最多十层

5.Taro.navigateBack关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层

6.注意事项

1.微信小程序开发工具的配置:
在这里插入图片描述

2.尽量使用Taro组件库的标签。虽然可以通过插件,使用html标签,但是在不同端可能会出现一起奇怪的问题;

7.分享

1.转发onShareAppMessage(Object object):监听用户点击页面内转发按钮(button 组件 open-type="share")或右上角菜单“转发”按钮的行为,并自定义转发内容。

注意:只有定义了此事件处理函数,右上角菜单才会显示转发按钮

2.分享到朋友圈onShareTimeline():监听右上角菜单“分享到朋友圈”按钮的行为,并自定义分享内容

注意:只有定义了此事件处理函数,右上角菜单才会显示分享到朋友圈按钮

8.Taro 的原理

在 Taro 中采用的是编译原理的思想,所谓编译原理,就是一个对输入的源代码进行语法分析,语法树构建,随后对语法树进行转换操作再解析生成目标代码的过程。
在这里插入图片描述

词法分析:JS代码运行前,有一个类似编译的过程即词法分析,词法分析主要有3个步骤:分析函数参数、分析变量声明、分析函数声明

语法分析:会将上一步的词法单元集合分析并最终转换为一个由元素逐级嵌套的语法结构的树,即抽象语法树

1.抹平多端差异

基于编译原理,我们已经可以将 Taro 源码编译成不同端上可以运行的代码了,但是这对于实现多端开发还是远远不够。因为不同的平台都有自己的特性,每一个平台都不尽相同,这些差异主要体现在不同的组件标准与不同的 API 标准以及不同的运行机制上

在这里插入图片描述

image-20210908090047040.png

taro build 命令是整个 Taro 项目的灵魂和核心,主要负责多端代码编译(H5,小程序,React Native等)

  1. 编译工作流与抽象语法树(AST)

Taro 的核心部分就是将代码编译成其他端(H5、小程序、React Native 等)代码

首先是 Parse,将代码解析(Parse)成抽象语法树(Abstract Syntex Tree),然后对 AST进行遍历(traverse)和替换(replace),最后是生成,根据新的 AST 生成编译后的代码…

2 .Babel 模块

Babel 是一个通用的多功能的 JavaScript编译器,更确切地说是源码到源码的编译器,通常也叫做转换编译器(transpiler)。

给 Babel 提供一些 JavaScript 代码,Babel 更改这些代码,然后返回给你新生成的代码

3.解析页面 Config 配置

在业务代码编译成小程序的代码过程中,有一步是将页面入口app.config.js属性解析出来,并写入 *.json 文件,供小程序使用。

9 . 上线流程

  1. 微信开发者工具:右上角的【上传】按钮,即可发布;

  2. 微信小程序:版本管理中会有审核版本

在这里插入图片描述

10.开发过程中遇到的问题

1.css 不能使用属性选择器,不能灵活操作DOM元素

2.目前微信社区对数学公式Latex没有一个很好的支持

3.微信富文本不支持复制文本功能

相关文章:

  • 分支合并到b和b合并到a有区别吗
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • jQuery基础
  • Stream API
  • Iceberg源码学习:flink读iceberg流程一
  • C++----IO流(参考C++ primer)
  • 利用内网穿透实现无固定IP调试支付回调
  • AI/DM相关conference ddl(更新中)
  • 大脑神经网络记忆原理图,记忆力机制的神经网络
  • MySQL安装与配置
  • tf.quantization
  • CleanMyMac X的免费版电脑系统瘦身工具
  • k8s 读书笔记 - 初始化容器 Init Conatiner
  • ES8(Java API Client)查询详解
  • 内置单片机的433无线模块高速连传典型运用
  • SegmentFault for Android 3.0 发布
  • Create React App 使用
  • FineReport中如何实现自动滚屏效果
  • Java多线程(4):使用线程池执行定时任务
  • leetcode-27. Remove Element
  • Lucene解析 - 基本概念
  • magento2项目上线注意事项
  • MySQL主从复制读写分离及奇怪的问题
  • 从setTimeout-setInterval看JS线程
  • 对象管理器(defineProperty)学习笔记
  • 基于Android乐音识别(2)
  • 基于组件的设计工作流与界面抽象
  • 开源SQL-on-Hadoop系统一览
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端_面试
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链分支循环
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 网络应用优化——时延与带宽
  • 微服务入门【系列视频课程】
  • 用Python写一份独特的元宵节祝福
  • 与 ConTeXt MkIV 官方文档的接驳
  • UI设计初学者应该如何入门?
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ###C语言程序设计-----C语言学习(6)#
  • #微信小程序:微信小程序常见的配置传旨
  • (02)vite环境变量配置
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (备忘)Java Map 遍历
  • (二)c52学习之旅-简单了解单片机
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)Sublime Text3配置Lua运行环境
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 2.1路线图
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core 项目指定SDK版本