之前在制作个人静态博客的时候,考虑过用 Serverless 做过一些Api接口。
主要优点就是部署、运维方便,且功能也不是很复杂。
uni-app 有个 uniCloud ,最近刚有个项目来练手,就顺带实践下。
uniCloud 使用流程
uniCloud 官方文档:https://uniapp.dcloud.io/uniCloud/README
创建服务空间
支持阿里云、腾讯云,在有一些特性支持不一致。因为微信小程序云开发做的比较早,相比于阿里云,腾讯云在这边支持的特性会多一点。
创建云函数
点击新建云函数,并命名。
uniCloud 属于 FaaS(函数即服务),最小运行粒度为函数,所以需要单独安装依赖。
安装依赖
1 | cd 云函数目录 |
如果云函数上传失败错误:“npm install执行失败.如果云函数目录下存在package-lock.json, node_modules可能会导致 npm install失败, 请删除后重试.”,建议先把npm源切换成官方安装,再上传。
1 | # 切换回官方源 |
另外因为阿里云不支持,所以 uniCloud 全量上传包(包含node_modules),上传速度会有点慢。
如果功能、依赖比较类似,可以考虑放到一个云函数,然后根据参数,来分别调用相关逻辑。
本地测试
点击配置运行测试参数,可以本地测试云函数是否有问题,暂不支持断点调试。
运行测试参数会作为输入参数,传递到云函数的 event
上传部署
测试完成后,右键云函数文件夹,上传部署。
部署完成后,前端就可以正常调用了。
一些小Tips
冷启动
如果云函数长期不运行,第一次启动会有冷启动时间。
如何公用模块
因为每个云函数是独立的,那如何使用公共模块呢?比如配置、常用工具
下面是 ucloud 使用公共模块的项目结构
1 | |--cloudfunctions |
在云函数根目录,创建common目录,会自动识别为公共模块目录。
右键common目录,可以创建公共模块。
创建公共模块后,在其他云函数添加依赖。
1 | # 初始化 npm |
添加依赖后,可以 require 进来使用。
1 | // 这里以 config 公共模块为例 |
但是公共模块修改后,需要更新所有使用该公共模块的云函数,另外公共模块也需要部署上传。