趣学前端 | Taro迁移完成之后,总结了一些踩坑经验

背景

四月份的时候,尝试将老的移动端项目改造成多端。因为老项目使用的React框架,综合考量,保障当前业务开发的进度同时,进行项目迁移,所以最后选择了Taro框架。迁移成本会低一些,上手快一些。

上个月,也就是七月份,我们用一个月的时间实现了两个项目从原生小程序到Taro框架的迁移。这当中,因为几个「小水坑」,我们连着加了两周的班。我把其中几个比较难搞的问题,解决方案总结了下来。

Taro文档

Taro的官方文档写的挺详细的,不过感觉搜索功能不是特别顺手。我平时搜不到想要的词条,会在菜单里找找可能的页面,基本多刷刷文档,能找到想找的内容。

项目迁移

之前写过一篇项目迁移的文章:【Taro开发】四月芳菲,Taro观赏指南。文章中对于基本配置、采用的UI框架、路由处理等基础功能实现,本篇不再重复。

踩坑指示牌

这次的坑,新旧都有。原本以为解决的问题,其实没有完全解决,所以我把最终的实现方案做了总结。

小程序文件过大的问题

最开始用分包的方式,在开发者工具中提交代码提示文件体积过大。但是又没找到问题在哪,最后才用了方案B,设置环境变量 NODE_ENV 为 production 可以开启压缩。如下为项目命令:

"scripts": {"build:weapp": "NODE_ENV=production taro build --type weapp","dev:weapp": "npm run build:weapp -- --watch"
}

但是这样做会有个额外的问题,就是无法在用NODE_ENV区分环境。后来我采用的解决方案是

  • 小程序端使用envVersion区分环境
const env = wxConfig.envVersion;
// 小程序开发环境 release-正式 trial-体验 develop-开发
const baseUrl = env === 'release' ? requestUrl : devrequestUrl;
  • H5端则通过页面的域名区分环境
let env = 'production';
if (NODE_ENV === 'production' && window.location) {if (window.location.origin.indexOf('//dev') !== -1) {env = 'dev';}if (window.location.origin.indexOf('//release') !== -1) {env = 'release';}
} else if (NODE_ENV === 'development') {env = 'dev';
}

H5页面间样式冲突

开始我并没有往样式冲突上想。我把项目发布到测试环境之后,页面布局发生了局部混乱。

一开始我以为是功能写的有问题,找了半天,换了实现方式,也没有解决问题。然后我找了一下规律,发现当不同页面切换时,切到某个页面会导致样式错乱。于是我打开浏览器的元素审查,查看页面源码。截图如下:

原来Taro框架生成的H5页面,每次切换路由之后,所有的页面都是在app根下,通过display控制展示和隐藏。这种情况下,我采用的样式隔离的方式来避免冲突。

官方提供的CSS Modules,尝试了一下觉得有点繁琐,所以没有采用。

不要使用空标签

空标签会导致项目部署时报错,如下代码:

<>111</>

我统一用Fragment组件替换了空标签:

<Fragment>111</Fragment>

部署前需要确认Jenkins上是否已安装了Taro

我们的项目刚上测试环境时,发版工具给了如下报错:

sh: taro: command not found

请教了运维的同事后,运维的同事帮忙安装了Taro。所以部署前确认一下,不然发版会失败,着急提测会手忙脚乱。

尺寸单位替换

小程序迁移的时候注意单位的替换,因为我是直接把小程序的样式代码迁移过来的,所以需要将原本的rpx更换为px。Taro 默认以 750px 作为换算尺寸标准,所以尺寸值不需要进行额外的修改。

总结

后面还会有React项目迁移的需求,等那个项目迁移完成之后,我会再总结一般踩坑经验。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAN一致性测试:物理层测试之终端电阻测试

从本周开始结合工作实践&#xff0c;给大家总结CAN一致性相关的测试 包括&#xff1a;物理层、数据链路层、应用层三大块知识点 CAN一致性测试:物理层测试之终端电阻测试 试验目的&#xff1a; 测试控制器的 CANH 对地、CANL 对地、CANH 对 CANL 的内阻是否符合 ISO11898-2的…

读写算杂志《读写算》杂志社读写算杂志社2024年第7期目录

教育资讯 全国学生心理健康工作咨询委员会第一次全体会议召开 1 扩优提质 区域先行——基础教育高质量发展现场会在福州晋安召开 1-2 河北唐山曹妃甸&#xff1a;新学期抓好四项工作 2-3 崇红立志——江苏盐城亭湖7万学生争做新时代红色少年 3 习作选登 秋…

ubuntu設定QGC獲取pixhawk Mini4(PX4 Mini 4) 的imu信息

ubuntu20.04 QGC使用v4.3.0的版本 飛控pixhawk Mini4 飛控上只使用一條micro USB連接電腦&#xff0c;沒有其他線 安裝命令 sudo apt-get remove modemmanager -y sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libf…

python之数组,链表,栈,队列

1.数组 优点&#xff1a; 索引操作速度快&#xff1a;通过索引可以直接访问元素&#xff0c;因此索引操作的时间复杂度是 $O(1)$&#xff0c;即常数级 缺点&#xff1a; 插入、删除元素慢&#xff1a; 如果需要在中间或开始位置插入或删除元素&#xff0c;可能需要移动大量…

加密 / MD5算法 /盐值

目录 加密的介绍 MD5算法 盐值 加密的介绍 加密介绍&#xff1a;在MySQL数据库中, 我们常常需要对密码, 身份证号, 手机号等敏感信息进行加密, 以保证数据的安全性。 如果使用明文存储, 当黑客入侵了数据库时, 就可以轻松获取到用户的相关信息, 从而对用户或者企业造成信息…

【全开源】国际版JAVA多商户运营版商城系统源码支持Android+IOS+H5博纳软云

本系统开发使用JAVA技术栈开发 使用uniapp技术栈 支持H5AndroidIOS 一、功能介绍 精准分类、我的团队、开通会员 我的返利、我的订单、快速购买 邀请返利、购物车、我的提现 二、演示说明 多商户体验方式&#xff1a; 请私信客服获取体验地址 多商户自营商城商户端 : 请…

Arm MMU深度解读

文章目录 一、MMU概念介绍二、虚拟地址空间和物理地址空间2.1、(虚拟/物理)地址空间的范围2.2、物理地址空间有效位(范围) 三、Translation regimes四、地址翻译/几级页表&#xff1f;4.1、思考&#xff1a;页表到底有几级&#xff1f;4.2、以4KB granule为例&#xff0c;页表的…

Mac系统:mysql+jdk+neo4j

mysql 指令 //启动MySQL服务 sudo /usr/local/mysql/support-files/mysql.server start//停止MySQL服务 sudo /usr/local/mysql/support-files/mysql.server stop //连接MySQL数据库&#xff0c;在进行这一步前要先关掉服务 mysql -u root -p //检查MySQL服务状态 sudo /us…

复合式统计图绘制方法(6)

复合式统计图绘制方法&#xff08;6&#xff09; 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图环形图绘制较难。 在统计图的应用方面&#xff0c;有时候有两个关联的统计学的样本值要用统计图来表达&#xff0…

TEASEL: A transformer-based speech-prefixed language model

文章目录 TEASEL&#xff1a;一种基于Transformer的语音前缀语言模型文章信息研究目的研究内容研究方法1.总体框图2.BERT-style Language Models&#xff08;基准模型&#xff09;3.Speech Module3.1Speech Temporal Encoder3.2Lightweight Attentive Aggregation (LAA) 4.训练…

编程界的圣经:从Scheme到JavaScript构建你的计算思维

文章目录 适读人群目 录 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发…

INA226电流/功率计模块使用方法

之前的文章简要介绍了开源INA226电流计模块的功能特点&#xff0c;本文将详细介绍INA226电流计模块的使用方法。 特性 感测总线电压范围&#xff1a;0V - 36V高侧/低侧电流感测电压、电流、功率测量0.1% 增益误差10uV 偏移可配置测量平均值16个可配置I2C地址2.7V - 5.5V 电源…

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中&#xff0c;我们一般会提供一个搜索框&#xff0c;输入关健字&#xff0c;点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …

[AutoSar]BSW_Com010 CAN IF 模块介绍

目录 关键词平台说明一、CAN IF 所在架构位置二、CAN interface 简介三、CAN interface 主要功能描述3.1 CANIF 被调用方式3.1.1 中断模式3.1.2 轮询模式3.1.3 混合模式 3.2 Hardware object handles&#xff08;HO&#xff09;3.4 Dynamic L-PDUs3.4.1 Dynamic Transmit L-PDU…

HSCCTF 3th 2024 Web方向 题解wp

WEB-CHECKIN【*没出】 直接给了源码 <?php highlight_file(__FILE__); error_reporting(0); $a$_POST[1]; $b"php://filter/$a/resource/dev/null"; if(file_get_contents($b)"2024"){echo file_get_contents(/flag); }else{echo $b; }咋这么像 WEB…

人工智能迷惑行为大赏(AI智障)

目录 人工智能 人工智能的“幽默”瞬间 技术原理探究 社会影响分析 人工智能 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一个涵盖了多个学科的综合领域&#xff0c;主要研究如何应用计算机来模拟人类的某些思维过程和智能行为&#xff0c;如…

阿里云-零基础入门推荐系统 【Baseline】

文章目录 赛题介绍评价方式理解赛题理解代码实战导包df节省内存函数读取采样或全量数获取 用户 - 文章 - 点击时间字典获取点击最多的topk个文章itemcf的物品相似度计算itemcf 的文章推荐给每个用户根据物品的协同过滤推荐文章召回字典转换成df生成提交文件获取测试集从所有的召…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

matlab 基操~

MATLAB基本操作 1. 对象定义 使用sym定义单个对象、使用syms定义多个对象 2. 使用limit求极限 $$ \lim_{v \rightarrow a} f(x) $$ limit(f,v,a) % 使用limit(f,v,a,left)可求左极限 3. 导数 使用diff(f,v,n)对$ f(v)v^{t-1} $求 $ n $ 阶导 $ \frac{d^nf}{d^nv} $&#xf…