小程序移植uni-app经验分享

荀恺
• 阅读 9429

小程序移植uni-app经验分享

背景

公司产品期望h5与小程序页面样式和功能保持一致,并能同步发布,而目前已有线上的小程序和h5。

模式

基于以上背景,决定使用跨端框架,维护一套代码,发布小程序和h5两个平台。由于目前线上小程序的功能相对简单,接口和逻辑清晰,h5功能繁多,技术框架不统一,未完全分离等原因,所以考虑将微信小程序先转换为跨端框架语法,再根据需求分布转换成h5,最终希望可以统一成维护一套代码。

技术选型

uni和tara 最终决定使用uni-app更适合我们的产品
点击查看:uni框架简介

工具

开发工具:bhuilderX、微信开发者小程序
小程序转换为uni开源工具:miniprogram-to-uniapp(本次尝试版本1.0.42)

miniprogram-to-uniapp(mac)

因手动转页面太过耗费时间,所以上网搜索发现了作者@zhangdaren开源了小程序到uni-app的转换器,在此表示由衷感谢。

全局安装:sudo npm install miniprogram-to-uniapp -g
查看版本:wtu -V
升级到最新版本:npm update miniprogram-to-uniapp -g
安装指定版本:sudo npm install miniprogram-to-uniapp@1.0.49 -g
转换:wtu -i [项目路径] -o [输出目录] (-o及之后可不写,会在同级目录创建一个文件夹名+_uni结尾的文件夹)

转换成功日志
小程序移植uni-app经验分享

小程序移植uni-app经验分享

小程序移植uni-app经验分享

环境和平台

点击查看:运行环境判断

开发环境和生产环境
跨端兼容

点击查看:跨端兼容
条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台

写法:以#ifdef#ifndef%PLATFORM%开头,以#endif结尾。

  • ifdef:if defined 仅在某平台存在
  • ifndef:if not defined 除了某平台均存在
  • %PLATFORM%:平台名称(如微信小程序:MP-WEIXIN;h5:H5

支持的文件

  • .vue
  • .js
  • .css
  • pages.json
  • 各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug

注意:条件编译是利用注释实现的,在不同语法里注释写法不一样,js使用// 注释、css 使用/* 注释 */、vue/nvue 模板里使用<!-- 注释 -->

注意问题

需要手动调试

实时跟进转换器的更新情况,以下部分问题已经在新版转换器中修复了,如果使用的是新版转换器,部分问题不再需要手动调试 点击查看:转换器 README.md

globalData

globalData,这个工具里已经转化过了,在uni-app的app.vue文件中不可以直接使用this.globalData,会报错找不到,而应该使用this.$options.globalData。uni-app已经可以支持。

动态class问题
<view :class="'know-text ' + (!showAllInfo?'info-omit':'')">

需要转换为

<view class="know-text" :class="(!showAllInfo?'info-omit':'')">
image、input标签

image、input标签会转成<input></input><image></image>需要手动转换成<img /><input />

hidden

hidden会被工具转换成v-if 需要手动将这些更改改回hidden

wxs文件

小程序中运行在视图层,未避免逻辑层和渲染层交互通信折损的wxs文件,在最新版本工具中仍会转换为js文件,但目前uni已经支持,转换器在跟进,等待更新。点击查看:uni对wxs的支持
小程序移植uni-app经验分享

data

视图层的数据必须在data里面定义过,否则undifined,转换器会帮忙转一部分,还有一部分没有转到,需要手动转化

options.id

在小程序的onready回调中可以通过this.options拿到页面路径参数,但是在转换后的uni项目中,无法取到该参数,需要在onloadsetData

onReady: function () {
    if (this.options.id) {
        getApp().ajax({
            url: 'xxxx',
            data: { 
                id: self.options.id 
            },
            success: res => {
                ...
            }
        })
    }
},

仍存在的问题

前后端改造

微信小程序转换为uni-app,再发布微信小程序是没问题的,后续要将这套代码发布为h5甚至更多平台,涉及到服务端改造,尤其h5未完全分离的情况下,工程量还是蛮大的。

服务特殊处理

登陆、支付、推送、定位、地图等联网服务需要单独处理

其他

小程序转换后的uni项目运行在微信小程序开发工具中报错,但没阻断行为

VM1425:1 \[Vue warn\]: Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option.
点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
小森森 小森森
2年前
计划助手V1.0-微信小程序(QQ小程序)-源代码分享
疫情期间在家感觉好无聊啊,于是利用空闲时间做了一个用来记录和管理小目标时间的小程序,命名为《小沙漏》。QQ版本小程序同步上线,QQ小程序叫《时间小沙漏》,欢迎大家前来体验,后期也会添加其他的新功能哦【区别】:微信小程序的代码与QQ小程序的源码是不一样的。微信小程序的源码基于微信小程序云开发,需要在有网络的情况下使用,具有同步功能,所有记录在删除小
Wesley13 Wesley13
4年前
java版本springcloud+springboot+mybatis 分布式 微服务 多租户 电子商务 直播带货 短视频带货 社交电商平台
涉及平台:平台管理(包含自营店面)、商家端(PC端、手机端)、买家平台(PC端、H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务)核心架构:SpringCloud、SpringBoot、Mybatis、Redis、SFTP前端框架:VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程
梦
5年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Easter79 Easter79
4年前
Taro小程序自定义顶部导航栏
微信自带的顶部导航栏是无法支持自定义icon和增加元素的,在开发小程序的时候自带的根本满足不了需求,分享一个封装好的组件,支持自定义icon、扩展dom,适配安卓、ios、h5,全面屏。我用的是京东的Taro多端编译框架写的小程序,原生的也可以适用,用到的微信/taro的api做调整就行,实现效果如下。!在这里插入图片描述(https://i
dkll dkll
1个月前
校园生活服务小程序/校园跑腿/社交论坛系统源码-校园闲置交易兼职全职便利店小程序
一、系统整体架构设计前端基于Uniapp实现小程序、H5、APP多端复用,提供多种插件扩大功能趣味性。系统分为三大核心层:客户端层:小程序、H5、原生APP,统一使用Uniapp构建。服务中台层:整合用户系统、内容系统、圈子系统、商城系统等。运营后台层:P
京东小程序平台助力快送实现跨端 | 京东云技术团队
前言:京东小程序开放平台是由京东自主研发的开发者开放平台,类似于微信和支付宝的小程序开放平台,提供了丰富的开放能力和完整的小程序开发生命周期所需的功能。开发者可以轻松地使用开发者工具IDE进行开发、调试、预览和代码转换,并在控制台进行线上小程序发布、审核、
程序员小五 程序员小五
1年前
融云IM干货丨如何评估uni-app的前景
根据搜索结果,UNIapp作为一款基于Vue.js的跨平台应用开发框架,自2018年发布以来,其发展前景被普遍看好。以下是几个关键点来评估UNIapp的前景:跨平台能力:UNIapp支持开发者使用一套代码同时编译出iOS、Android、H5、小程序等多个
dkll dkll
5个月前
从社交到变现:陪玩系统源码小程序全功能图谱,解锁「游戏+社交+赚钱」新生态
一、技术架构:全端覆盖与高效协同陪玩小程序的核心竞争力在于“一套代码,多端运行”,通过UniAppPHP/Node.js的技术组合,实现小程序、APP、H5三端数据互通与体验无缝衔接。前端开发:采用UniApp框架,支持微信、QQ、抖音等多平台小程序,结