# Hi 运动(教练端)小程序

请编辑过的人员留下你的姓名

  • 文档编辑人员 杜文华(2020/4/27)

# 项目地址

  • svn://svn.webdev.ouj.com/biz/hiyd_miniprogram/wx

# 技术选型

目标:单纯的微信小程序,没有任何跨端的需求

  1. 针对当时有挺多可选择的方案,(1)原生,(2)框架
  2. 框架来说,就是更多的用于跨端的,所以感觉没多大必要。但是原生也会有原生的问题

原生的问题:

  1. 比如 npm 的管理就比较棘手,官方的 npm 引入需要构建然后需要外部相对路径的引入,这样的灵活性不太高
  2. 对于 sass,TypeScript 等预编译的操作无法实现
  3. 不支持 ES7 以上的高级语法,如 async await 等特性
  4. 不管是体验版还是开发版只能存在一种环境,一旦发布预览测试环境切换繁琐
  5. 缺少集中式的 API 地址和 ENV 环境变量管理

最终由于技术人员大家的技术都倾向于原生比较容易上手,框架需要再熟悉可能有碍于开发效率等,选择了原生

# 最终的技术栈

Gulp4.x + TypeScript(后来觉得 wx 的类型可能有点坑就放弃了) + Babel + Scss + 原生小程序内置 Api + jest(单元测试,node 版本要尽量高不然会报错) + Mobx

5/22注后来发现TypeScript也是可以做的,wx的类型直接引入微信的库就可以了,我们要做的只是用TypeScript转换成JS就可以了

# 项目架构

- dist
- node_modules
- src
  |- ...
  |- __test__               --- jest单元测试
  |- assets                 --- 静态资源文件(*png,*jpg)
  |- components             --- 公共组件(自定义)
  |- custom-tab-bar         --- 自定义tabbar(一定要放在最外层)
  |- libs                   --- 用上了ES7的async的地方都得用这个库 (在头部得引入不然会报错)
  |- miniprogram_npm        --- 小程序的npm
  |- pages                  --- 页面
     |- ...

     |- ...
  |- router                 --- 封装的路由
  |- services               --- 业务层
     |- lib                 --- 封装的ajax
  |- styles                 --- 定义的全局scss
  |- utils                  --- 工具类
  |- index.d.ts             --- 用来提示类型的(不是用TypeScript但是可以透过工具达到类型提示的效果)
  |- ...
- gulpfile.js               --- 构建打包的配置文件

# 开发时发现的问题

# 2020/5/6

小程序的背景图片不能直接引入本地的,可能是因为线上的缘故吧。要转成 base64 或者是引入线上服务器的地址才可以引入。

数据流最后是通过 mobx 进行传递。写了一些例子可能都不太好,没有那种修改了马上更新的操作,放在 globalData 就更加不行

使用 async 的地方都得引入 libs 里面的 runtime 库不然会报错(本地可能不报错,但是线上会报错)

# 20205/14

商品管理的拖动还是存在bug,比如无法实时看到拖动的效果,只能在拖动完最后才能看到效果。(最主要还是安卓存在的性能问题,因为每次都会load图片,安卓load图片就会出现性能的问题,IOS不会有这个问题,实现的原理得自己看下里面的)

保存海报是通过canvas画出来的,所以要看一下对应的微信提供的Api

小程序自带的mobx在App.js无法使用,因为没有办法代理App.js里面的数据。page里面如果在onload,等生命周期使用。得下一轮循环才行(不知道是不是推到微任务里面去了)

# 2020/5/22

tabPage是自定义,并且是重写了onShow方法,是在Page实例化前调用的,所以在tabPage的onShow里面没有找到当前tabPage的this。