腾讯云云开发云函数的文档中写道——
不同的云函数可以共用代码文件(目录)吗
未上线
如果是简单的云函数,这一点还能接受,在开发 Twikoo 评论系统的过程中,云函数要实现的 API 越来越多,逐渐让我发现了它的弊端:
- 大量的代码复制!
- 版本管理非常不便!
- 依赖管理非常不便!
- 一次要部署十来个云函数,很麻烦!
- 每个云函数都有独立的冷启动时间,很慢!
显然违反了开发的 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
| 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 }
|