笔者关注云开发已经好久了,最近动手将以前作的一款团购小程序重构并迁移到了云开发上,同时将源码开源,欢迎感兴趣的朋友一块儿交流。css
小程序html
底层框架: Taro 3.0 (React)react
界面:Vantgit
状态机:SWRgithub
管理后台界面web
服务端数据库
目前Taro已经进入了3.x时代,可让开发者使用完整的React、Vue等框架进行开发。笔者做为一个重度React使用者天然会在众多框架中选用Taro(以后会尝试Kbone)。json
由于此次要开发的购物类小程序故而会选用有赞开源的Vant控件库。小程序
状态机(State Machines)方面,选择了更加轻量的Hook方案。在Hook方案中调研了两个库 react-query与swr,总体来讲swr更加的轻量便捷。服务器
管理端控件库方面,目前国内React体系下绝大多数都会选用Antd控件库,说实话笔者是一个爱尝鲜的人,在上一个开源项目( lucky_bilibili_web)中尝试了微软开源的FabricUI 库。这次又盯上了elastic开源的EUI,用完后感受很是的经验!用这套控件库开发一些纯工具类的应用实在是太便捷了。
本文末尾会放出一张用工这个控件库作工具类应用的图[1],彻底是用EUI控件组合出来的,你们能够感觉一下。
服务端方面,笔者关注serverless好久,早前都是国外的资源不少,另外也很眼馋Google的Firebase。笔者以前开发小程序都是自购服务器,自建服务端,还须要平常对服务器运维,费心费力。 如今很是感谢腾讯云加入到了serverless生态的建设中,使得国内的开发者也能无障碍的使用serverless服务。CloudBase云开发团队更是对serverless进行了再包装,下降了serverless学习的复杂性,作到了开箱即用,一键部署。
商品、界面展现相关表
用户、订单、支付相关表
管理员相关表
笔者在开发这块小程序时也遇到了各类各样的问题与困难,在社区中查阅了大量资料作了各类测试也都找到了答案,很想一次性的总结都放到这里,本篇因为篇幅有限,也不想把社区中别人发的东西再重复的发一边,这里先已源码标注的形式作总结 Talk is cheap,Show me the code。 以后会有一些笔者本身总结的技术实现方案带上私货单独发文。
https://github.com/nasawz/niceup
小程序相关:
参见源码:
/mini/src/app.config.ts /mini/config/index.js //line 51 /mini/config/index.js //line 16
参见源码
/mini/src/components/wemark /mini/config/index.js //line 74 /mini/src/hooks/useProducts.ts //line 40 /mini/src/lib/b64.ts /mini/src/pages/detail/detail.config.ts /mini/src/pages/detail/detail.tsx //line 165 /mini/global.d.ts
参见源码
/mini/src/pages/order/detail/detail.tsx //line 71 /cloud/functions/pay /cloud/functions/pay_cb
参见源码
/mini/config/index.js //line 39 /mini/src/conponents/product-list/index.tsx //line 10 /mini/linaria.config.js /mini/babel.config.js
参见源码
/mini/src/app.config.ts //line 41 /mini/src/app.config.ts //line 95 /mini/src/components/nav /mini/src/components/tabbar
参见源码
/mini/wx_ci.js
管理后台相关
参见源码
/manage/src/theme/niceup /manage/src/lib/theme.ts
参见源码
/manage/src/lib/tcb.ts
注:小程序云开发的退款只支持中手机端发起请求,我这里作了变通,经过HTTP API的形式实现了退款
参见源码
/manage/src/lib/tcb.ts //line 18 /manage/src/hook/useOrderMuation.ts //line 81 /cloud/functions/mini-proxy /cloud/functions/refund
参见源码
/manage/src/routes/index.tsx /cloud/functions/aggregate-psn /cloud/functions/aggregate-sales
注:这里是个人私货啦 在源码中我专门留下了一个ext的文件夹,并对EUI的表单控件进行了二次封装。用到的核心库是rc-field-form,感谢原做者
参见源码
/manage/src/routes/ext /manage/src/components/formList /manage/src/components/formRow /manage/src/components/formControls
参见源码
/cloud/functions/subscribe-message /manage/src/hook/useMessageMuation.ts
参见源码
/cloudbaserc.json //line 8 /cloudbaserc.json //line 18 /cloudbaserc.json //line 192 /cloud/functions/db-init /cloud/functions/auth /manage/src/hook/useUser.ts //line 33
以上即是关键的一些技术点在源码里的标注了。
最后欢迎你们尝试一键部署本项目到云开发上。
部署时会用到很多的环境变量,关于环境变量的获取请参考这篇文章。
若是想小程序可用,云开发的环境必须是有小程序开通的云开发环境。
若是部署失败的话还请检查开通按量付费模式是否已经开通。
当准备好各个变量参数后点击下边的按钮一键部署吧~
用EUI开发的工具类应用如图 ↩︎