云函数“层”功能开发小结
发布于 2 年前 作者 wqiao 889 次浏览 来自 分享

项目中如果有多个云函数,它们经常会用到很多公共的代码模块,比如查询用户信息、鉴权等等。在小程序中,我们可以通过require导入这些公共模块。但云函数之间是互相独立的,每个云函数只能访问自己的代码包,我们需要手动把这些公共的代码模块复制到每个云函数中,容易造成文件混乱。“层”正是为了解决云函数间代码复用的问题。

“层”是什么

小程序开发文档中并没有“层”的介绍,不过我们可以在腾讯云开发文档中找到相关的介绍(传送门)。之前社区里也有大神分享过相关的文章(传送门),可以看到当时开发者工具创建的云开发环境并不能很好地支持“层”功能,这可能也是小程序开发文档没有“层”的相关介绍的原因。幸好,最近实测,开发者工具创建的云开发环境也可以正常使用“层”功能了。
简而言之,“层”就是每个云函数都可能访问的一个公共空间,它会在云函数启动时加载到云函数中。这样就可以保证每个云函数访问的都是同一个代码模块,不需要我们去手动同步代码文件。

“层”的创建和绑定

开发者工具并没有集成“层”功能,我们需要到腾讯云控制台来创建和管理。

第一步:使用小程序账号登录腾讯云控制台

第二步:点击云开发CloudBase,选择环境


第三步:选择云函数>层管理>新建

注意“层”的运行环境要和云函数相同,一般是Nodejs12.16,可以在“云函数管理”中查看云函数的运行环境。

第四步:点击云函数管理,选择要绑定的云函数

第五步:选择层管理>绑定,选择对应的层


“层”的访问

云函数触发时,“层”的代码包会加载到云函数中,这时云函数的目录结构是:

var
  user
  云函数代码(/var/user/)
opt
  层代码(/opt/)

这样我们就可以require导入我们的公共模块了。

举个例子,云函数的目录结构如下:

var
  user
  index.js
opt
  common.js

我们要在index.js中访问common.js文件,可以:

const common = require('../../opt/common.js') // 云函数不支持“/”访问根目录

因为云函数的环境变量包括“层”的路径,所以也可以:

const common = require('common.js') // 直接引用文件名

“层”的调试

很可惜,开发者工具并不支持本地调试“层”,而且本地调试和云端运行的目录结构并不相同。下面是我的调试思路:
把“层”代码包放在云函数的根目录

opt
  common.js
index.js

自定义环境变量ENV,根据ENV选择require的路径

// DEV:调试环境,引入云函数代码包里的opt文件夹
// PRO:生产环境,引入真正的“层”
// 注意:本地调试不能获取环境变量
const common = require(process.env.ENV == 'PRO' ? '' : './opt/' + 'common.js')

不知大家还有没有其它思路,欢迎一起讨论。

多翻翻腾讯云的文档,说不定还有惊喜~

相关文档

1 回复

一开始我也想用云函数层去实现,但是他只能在5个环境地下使用,所以当小程序多了以后,他的弊端也就显现出来。最后我是把公共的js打包发布npm

回到顶部