前言
大家好,我是橙海LZ。
在上篇文章中,对小兔鲜儿项目的页面部分做了总结分享,这篇文章对uni-app开发内容以外的部分做了延伸总结。
阅读该篇文章可以了解到:
- 发布上线流程
- 常见跨端兼容场景
- 原生App打包
- uniCloud云开发
- 一些心得分享
发布上线
举个场景,比如要发布到微信小程序平台,那么需要先打包构建项目代码
pnpm run build:mp-weixin
打包完成以后,项目根目录下会新增dist文件夹,找到里面build/mp-weixin文件夹,导入到微信开发者工具中(其他平台基本同理)。
点击上传
填写信息
登录微信公众平台,就可以看到刚刚上传的版本,后续根据实际业务做审核/上线即可。
跨端兼容
条件编译
条件编译处理多端差异 | uni-app官网 (dcloud.net.cn)
在登录页中,H5端是无法使用uni.login这个API的,该API是基于如wx.login等小程序平台的登录接口做的封装。
所以在H5中,需要单独写一套登录逻辑
写条件编译语句时,输入#会自动带出条件编译的提示
页面效果如下:
同样在微信登录的代码逻辑里,也需要加上条件编译
可以全局搜索wx或uni开头的API按需加上条件编译语句,一般来说只要有APP/H5场景都需要考虑下跨端兼容情况
打包至H5端
pnpm run build:h5
dist/build目录下会新增H5端打包后的内容
通过Live Server这个vscode插件,在本地启动服务来运行这个打包编译好的项目
项目运行起来后,会看到控制台报错了,内容是无法加载对应的资源
原因是资源路径出现问题无法查询到,应该改为.assets/xxx的形式
在manifest.json文件中,设置H5专有属性,并配置应用基础路径
重新运行项目,可以看到页面能够正常展示了
样式兼容
页面样式与布局 | uni-app官网 (dcloud.net.cn)
还有比如H5端是单页面应用(内部需要使用scoped做样式隔离),App端通过WebView渲染,组件样式也会被隔离。
小程序本质上个多页面应用,并不存在这个问题,但是由于一套代码多端使用,当打包至H5/原生App端时,样式会出现问题,比如骨架屏。
打开IOS端,能看到后面的骨架屏样式展示效果是不对的
拿首页的骨架屏举例,这里需要抽离PageSkeleton.vue中的样式,作为外部样式引入(由于首页还用到了轮播图,所以还需要引入轮播图的样式),来防止触发scoped样式隔离。
可以看到H5端和原生App端首页骨架屏的样式都恢复了
App端渲染的页面内容不是在<page>标签中,而是在<div id="app"></div>中,所以针对App端,需要对最外层容易的样式做下兼容
原生APP打包
Android
这里通过mumuPro安卓模拟器来操作下,打开「设置-关于手机」,可以通过多次点击版本号来开启「开发者模式」
其他品牌手机也类似,比如小米
打开HBuilderX,点击「运行」
将项目运行到安卓模拟器上
效果如下,页面展示上也没有问题
如果真机运行过程遇到问题,可以在「真机运行常见故障排除指南」中找找有没有解决方式
在打包成应用包前,在manifest.json文件中设置下打包后的应用图标
在manifest.json文件中获取uni-app应用的唯一标识,后续用来云端打包安卓应用
进入开发者中心,找到需要打包的应用
生成Android云端打包证书
生成好以后,界面会更新成这样
回到HBuilderX中,准备打包
选择下配置
如果没有安装过「App云打包」插件,在打包时会自动提示,安装下即可
等待打包完成即可
HBuilderX中还可以查看打包的状态
打包完成后安装到模拟器/手机中
打开查看下效果,那么安卓通过云端打包的基本流程就完成了
IOS
mac电脑上安装下Xcode这个工具,作为IOS端的模拟器
安装好以后,在HBuilderX中选择运行到模拟器基座
这里需要安装下IOS平台,否则运行到基座时无法找到模拟器设备(痛失7G容量T T)
正常能够找到IOS设备的情况
运行效果:
但是IOS打包需要付费申请证书,这点不如Android方便了,所以IOS端的打包就不演示了~
问题记录
在Mac电脑上如果是M系列的芯片,在运行项目到Android/IOS基座时可能会碰到下面的报错
如果遇见这个编译错误情况,需要安装两个包来处理
pnpm add @esbuild/darwin-arm64 -D
pnpm add @esbuild/darwin-x64 -D
安装好以后,报错问题可能还是存在,提示版本不匹配之类情况,那么需要根据不同的报错情况,修改package.json中包的版本来匹配,然后重新执行pnpm i安装依赖即可
处理方式可见参考链接。
uniCloud云开发
H5端的级联选择器,无法使用内置组件picker组件
所以需使用uni-ui里的组件uni-data-picker组件,这个组件的数据源又需要使用uniCloud。
接下来配置下uniCloud,基本流程如图
打开登录到服务空间 - uniCloud (dcloud.net.cn),并创建一个服务空间(根据自己的需求选择云服务器,我选择的阿里云的免费套餐- -)。
创建好服务空间后需要近十分钟左右初始化过程
进入服务空间,找到云数据库创建空表,「使用openDB表模板创建」的表分类处选择其他,并选择中国城市opendb-city-china
这个在官方文档也有介绍
点击创建,创建好以后如下图所示
回到HBuilderX中,右键项目目录,创建uniCloud云开发环境,并根据自己创建的服务空间配置来选择对应的云服务器
新建完成好以后,根目录下会新增一个uniCloud文件夹
右键该文件夹去关联服务空间
这里会自动带出登录到HBuilderX编辑器账号及登录服务空间账号所属的云服务空间
关联成功
右键database目录选择「下载所有DB Schema」
这样uni-data-picker组件需要的数据源就下载好了
在地址表单组件中,对地址组件的使用需要做下条件编译
回到浏览器中会发现项目运行报错了,原因是不能通过命令行来运行项目了
需要使用 HBuilderX 的编辑器动作来运行调试项目,选择「运行到浏览器」
就能看到对应的效果了(通过云端获取数据源)
心得分享
- 当发生和预期不一致的情况时,先重新编译运行项目查看(vscode+微信开发者工具),再去考虑是否是代码侧出了问题,编译器本身也经常出现问题。
- uni-app的问题优先去查看DCloud论坛回答
- 当页面组件标签出现ts报错时,因为语法的更新
tsconfig.json中的配置也要调整
注意@uni-helper/uni-app-types包的版本需要检查,一开始发现修改上述方式并不生效。
相关链接:
uni-helper.js.org/uni-app-typ…
ask.dcloud.net.cn/question/19…
得感谢DCloud论坛热心的开发者们,不然碰到一些棘手的问题还真不好找解决方案,不止uni-app,其他各大开源社区也是因为有了活跃、倡导分享的开发者们,才能让开源环境持续良性循环发展,感谢大家伙~
摘录一些在阅读官方文档时,一些个人觉得需要注意的小细节
写到最后
以上就是文章的所有内容。
感兴趣的伙伴欢迎点个关注🌟~
感谢你看到这里,如发现文章中的问题或其他感兴趣的内容欢迎指正讨论。^ ^