一句话总结就是,坑是真的多,填完一个坑等着你的就是下个坑。
因为所在项目组属于生活服务类相关的,需要做电影、蛋糕、打车、加油、车票、酒店等一系列的板块,需要嵌入在其他项目的 app 、小程序、h5 中。我们需要提供 H5 和 小程序双端服务,由于每个项目周期又短,为了节省开发周期时间,所以选了 uni-app 来开发。
uni-app 使用上,基本上和普通 vue 开发差不多,只要避免直接使用 web api 就可以,捋一遍文档基本可以上手了。踩得的第一个坑来了,由于我入职时第一个板块已经开始做了,项目使用 HBuilderX 创建的。HBuilderX 创建的项目只能使用 HBuilderX 启动,HBuilderX 这东西也不好用,只能再开个 vscode 开发了,开发阶段也没觉得啥,无非多开发编辑器多占点内存。
等测试阶段傻眼了,HBuilderX 创建项目只能再 HBuilderX 构建发布,没法集成到现有 CI/CD 上去,再 HBuilderX 打包就打包吧,这玩意还强制登陆,一个编辑器不登陆还不让打包。搜索了一下,还是有方法将 HBuilderX 创建项目转换成 cli 形式的,不过由于项目模块导入方式混用,无法无痛切换过去,项目也快上线,于是就没有去折腾了,在下一个项目去切换到 cli 方式。
uni-app 有自己插件市场,有很多现成的插件可以用。但是呢当你去下载插件是骚操作来了,首先是强制需要你登陆,然后登陆后还需要你强制看广告才能下载,这波骚操作真的是骚。有些作者希望整点插件赚点外快,可以收费下载可以理解,但是别人免费开源的插件,uni-app 还强制你扫码看广告是真的恶心了。
uni-app 一直都在加新功能,对于 bug 处理速度真的是慢,官方论坛一大堆没人回复的问题,一个劲的堆新功能,bug 没见修复多少,bug 全留着当传家宝了。HBuilderX 也是有点离谱,第一次在开发者工具里边看到招聘广告的,只能说 newb 了。
解决方式:
h5 端自己对 navigator.geolocation 封装,其他端使用 uni.getLocation。或者对 uni.getLocation 进行封装增加超时设置,超过几秒未返回,返回默认定位点。自己封装 navigator.geolocation 需要做好坐标转换,应该浏览器默认返回是 wgs84 ,需要自己转换为 gcj02 或其他的坐标系。
解决方式:
和上面处理方式一样,最直接就是自己封装 h5 定位,将 ip 定位地址,替换成自己服务器地址作为代理。
解决方式:
自定义查看位置组件,在 H5 端替换掉 uni-app 的。
解决方式: updated 事件后,再加入定时器延迟执行绘制操作。
解决方式: 将部分 v-for 拆分成组件形式,避免页面上 v-for 嵌套过多。
有些组件会在不同平台出现不同差异效果,需要你慢慢去踩坑填坑,一个个的趟过去。比如 popup 组件,小程序会出现滚动透传问题,而在 h5 上做了兼容处理,但是如果你打开后,未关闭直接跳转到新的页面,会导致新的页面无法滚动,需要在路由变化时关闭当前页面里的 popup 组件,这种问题真的是只能自己遇到一个填一个了。
uni-app 做了很多平台封装保证 api 的一致性,但是还是会经常写着发现平台不支持,只能自己另辟蹊径。
由于没有 app 需求,不知道在 app 上坑多不多,据以前同事使用体验来看据说坑更多🤣。不过对于一些简单应用可以尝试使用,毕竟能一套代码构建多端还是能提升不少效率的。但是你的应用复杂起来,什么多端开发,提高效率,这玩意效率真的不一定能高到哪里去,还不如分开效率高.
一句话总结就是,坑是真的多,填完一个坑等着你的就是下个坑。
因为所在项目组属于生活服务类相关的,需要做电影、蛋糕、打车、加油、车票、酒店等一系列的板块,需要嵌入在其他项目的 app 、小程序、h5 中。我们需要提供 H5 和 小程序双端服务,由于每个项目周期又短,为了节省开发周期时间,所以选了 uni-app 来开发。
uni-app 使用上,基本上和普通 vue 开发差不多,只要避免直接使用 web api 就可以,捋一遍文档基本可以上手了。踩得的第一个坑来了,由于我入职时第一个板块已经开始做了,项目使用 HBuilderX 创建的。HBuilderX 创建的项目只能使用 HBuilderX 启动,HBuilderX 这东西也不好用,只能再开个 vscode 开发了,开发阶段也没觉得啥,无非多开发编辑器多占点内存。
等测试阶段傻眼了,HBuilderX 创建项目只能再 HBuilderX 构建发布,没法集成到现有 CI/CD 上去,再 HBuilderX 打包就打包吧,这玩意还强制登陆,一个编辑器不登陆还不让打包。搜索了一下,还是有方法将 HBuilderX 创建项目转换成 cli 形式的,不过由于项目模块导入方式混用,无法无痛切换过去,项目也快上线,于是就没有去折腾了,在下一个项目去切换到 cli 方式。
uni-app 有自己插件市场,有很多现成的插件可以用。但是呢当你去下载插件是骚操作来了,首先是强制需要你登陆,然后登陆后还需要你强制看广告才能下载,这波骚操作真的是骚。有些作者希望整点插件赚点外快,可以收费下载可以理解,但是别人免费开源的插件,uni-app 还强制你扫码看广告是真的恶心了。
uni-app 一直都在加新功能,对于 bug 处理速度真的是慢,官方论坛一大堆没人回复的问题,一个劲的堆新功能,bug 没见修复多少,bug 全留着当传家宝了。HBuilderX 也是有点离谱,第一次在开发者工具里边看到招聘广告的,只能说 newb 了。
解决方式:
h5 端自己对 navigator.geolocation 封装,其他端使用 uni.getLocation。或者对 uni.getLocation 进行封装增加超时设置,超过几秒未返回,返回默认定位点。自己封装 navigator.geolocation 需要做好坐标转换,应该浏览器默认返回是 wgs84 ,需要自己转换为 gcj02 或其他的坐标系。
解决方式:
和上面处理方式一样,最直接就是自己封装 h5 定位,将 ip 定位地址,替换成自己服务器地址作为代理。
解决方式:
自定义查看位置组件,在 H5 端替换掉 uni-app 的。
解决方式: updated 事件后,再加入定时器延迟执行绘制操作。
解决方式: 将部分 v-for 拆分成组件形式,避免页面上 v-for 嵌套过多。
有些组件会在不同平台出现不同差异效果,需要你慢慢去踩坑填坑,一个个的趟过去。比如 popup 组件,小程序会出现滚动透传问题,而在 h5 上做了兼容处理,但是如果你打开后,未关闭直接跳转到新的页面,会导致新的页面无法滚动,需要在路由变化时关闭当前页面里的 popup 组件,这种问题真的是只能自己遇到一个填一个了。
uni-app 做了很多平台封装保证 api 的一致性,但是还是会经常写着发现平台不支持,只能自己另辟蹊径。
由于没有 app 需求,不知道在 app 上坑多不多,据以前同事使用体验来看据说坑更多🤣。不过对于一些简单应用可以尝试使用,毕竟能一套代码构建多端还是能提升不少效率的。但是你的应用复杂起来,什么多端开发,提高效率,这玩意效率真的不一定能高到哪里去,还不如分开效率高.