腾讯云云开发云函数代码共用的一种实践

腾讯云云开发云函数的文档中写道——

不同的云函数可以共用代码文件(目录)吗
未上线

如果是简单的云函数,这一点还能接受,在开发 Twikoo 评论系统的过程中,云函数要实现的 API 越来越多,逐渐让我发现了它的弊端:

  1. 大量的代码复制!
  2. 版本管理非常不便!
  3. 依赖管理非常不便!
  4. 一次要部署十来个云函数,很麻烦!
  5. 每个云函数都有独立的冷启动时间,很慢!

显然违反了开发的 DRY 原则,这迫使我开始思考解决方案。

正常的思维是,一个 API 写一个云函数,如果将云函数合并,用一个云函数实现不同的功能,能否解决这样的问题呢?

可以!

经过改造后的云函数,只保留了一个云函数入口点,通过传入 event,来调用不同的分功能,不同的功能也终于可以复用代码了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 云函数入口点 / entry point
exports.main = async (event, context) => {
let res = {}
await readConfig()
try {
switch (event.event) {
case 'GET_FUNC_VERSION':
res = getFuncVersion()
break
case 'COMMENT_GET':
res = await commentGet(event)
break
case 'COMMENT_LIKE':
res = await commentLike(event)
break
case 'COMMENT_SUBMIT':
res = await commentSubmit(event)
break
case 'COUNTER_GET':
res = await counterGet(event)
break
case 'GET_PASSWORD_STATUS':
res = await getPasswordStatus()
break
case 'SET_PASSWORD':
res = await setPassword(event.password)
break
case 'SET_CONFIG':
res = await setConfig(event)
break
case 'LOGIN':
res = await login(event.password)
break
default:
res.code = RES_CODE.EVENT_NOT_EXIST
res.message = '请更新 Twikoo 云函数至最新版本'
}
} catch (e) {
console.error('Twikoo 遇到错误,请参考以下错误信息。如有疑问,请反馈至 https://github.com/imaegoo/twikoo/issues')
console.error('请求参数:', event)
console.error('错误信息:', e)
res.code = RES_CODE.FAIL
res.message = e.message
}
return res
}

腾讯云云开发云函数代码共用的一种实践

https://www.imaegoo.com/2020/tcb-functions-dry/

作者

iMaeGoo

发布于

2020-10-30

更新于

2020-10-30

许可协议

CC BY 4.0

评论