此页面需要javascript支持,请在浏览器中启用javascript

腾讯云的云函数:微信云开发与Cloudbase与SCF

微信云开发
Cloudbase
小程序
SCF
serverless
共1005个字,阅读时间 5 分钟
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://icebreaker.top/articles/2021/2/24-cloudbase-and-sls-fw

本文写作时间 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 , 它的思路有一定的类似,和 HBuilderX 这个 IDE 深度集成。 同时它作为一个第三方的平台,既能够和阿里云合作,又可以和腾讯云合作。

在某些场景,比如:用户 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
  • 强大的上下文

在小项目场景下也非常适用了。