腾讯云的serverless : 微信云开发与Cloudbase与SCF
-
- 从 Firebase 说起
- Cloudbase 的本地化
- 微信云开发 与 Cloudbase
- SCF 与 Cloudbase 一些异同
- 三方总结
本文写作时间 2021/02/24 , 仅代表目前时间点下的官方文档和实际使用体验。
和腾讯云利益无关,如有刊误,欢迎指正。
从 Firebase 说起
Firebase是 Google 的一个把后端作为服务的云平台(BaaS) , 包含很多的功能:
- 实时数据库(Realtime database)
- 用户认证(Authentication)
- 自定义API(Cloud function)
- 消息推送(Cloud messaging)
- 静态网页Hosting
- 云存储(Cloud storage)
可惜由于 Google 自身的问题,在中国用不了。
Cloudbase 的本地化
Cloudbase
是腾讯云开发的云原生一体化开发环境和工具平台。大体的功能和
Firebase
是类似的。
不过它找到了微信小程序这样一个本地化极佳的场景,而且依托对应的 IDE(微信开发者工具)形成了一套较为完善的工具链闭环。
这里不得不提到, 它的思路有一定的类似,和
uni-cloud
这个 IDE 深度集成。 同时它作为一个第三方的平台,既能够和阿里云合作,又可以和腾讯云合作。
HBuilderX
在某些场景,比如:用户 oauth
登录 这一块说不定能 2 头通吃 (毕竟 Cloudbase 不可能支持支付宝登录吧,笑~)
微信云开发 与 Cloudbase
这两个实际上是一回事,只不过 微信云开发 是 Cloudbase 的一个定制化的场景罢了。
不过 微信云开发 的项目管理起来,不如 Cloudbase云开发 便捷。
比如 :
@cloudbase/cli
就已经开始使用
cloudbaserc.json
来管理项目。微信云开发就不行,我在使用这个cli工具时是看不到小程序的环境的,只能看到web的环境。
微信云开发中,部署一个云函数,是把对应的整个目录,直接压缩上传并部署,并不会自动分析里面的依赖。
例如:我们想抽离公共代码到外部:
// cloudfunctions/hello-world
const { UserInfoProjection } = require('../base/model/index.js')
exports.main = async (event, context) => {
...
}
// 上传并部署
此时由于没有把外部
base
中的上传上去,所以云函数就报错了。
解决这个的思路当然很多:
- 依赖分析
- layer (SCF和Cloudbase有)
- lerna
- copy目录
其中 copy 的思路是我们自己开发的时候,把
common
部分的代码, 利用
copy-webpack-plugin
类似的玩意 ,打入每个云函数里。
这样也会带来一个很大的问题,比如
common
包依赖
dayjs
,
lodash
这种极其常见的包,我们不得不在每个云函数的
package.json
, 加入对应的依赖, 这显然很烦。
Cloudbase这一块,并没有把
layer
对应的 api 放入 cli 去,但是 ui 上可以操作, 同时加了一个
installDependency
的选项,在云端自己去安装
node_modules
。这个我猜腾讯云有自己的 npm 源,当然这个选项对于比较大的项目,需要提炼公共逻辑/组件,发布到私有 npm 的,实际上也是无能为力的。
cloudbaserc.json
的配置也是倍感亲切。
CloudBase Framework
这块,个人不是很理解它和 SCF 兼容的
Serverless Framework
之间的关系。个人感觉有点在重复造轮子,与之相比
Serverless Framework
的兼容性会更强些吧。
SCF 与 Cloudbase 一些异同
SCF的云函数技术应该处于 Cloudbase 的上游。
SCF已经上线的 nodejs
12.16
的支持,还有 保留并发实例 等功能。
Cloudbase 还没有,nodejs 最高版本也只有
10.15
。
三方总结
云函数这一块,技术应该都源于 SCF , 流量灰度,发布版本这一块行为很类似, 技术上应该 SCF > Cloudbase >= 微信云开发 。
Cloudbase
作为一个 Baas , 功能上融合了腾讯云大量的产品,发展前景很不错。
微信云开发作为
Cloudbase
的微信小程序场景,依靠独有的
cloudId
等大量与微信绑定
- 便捷的 api
- 强大的上下文
在小项目场景下也非常适用了。