导读
当我们有很多云函数时,其中可能很多
中间件
、工具
是共用的。
把这些中间件
、工具
复制到每个云函数下,是一件很麻烦的事情,而且如果发生了更新,还要重新复制。最重要的是,这种方式,不符合科学的设计模式。
云函数里的 层(layer) 就可以很好的解决我们这个问题。它是把我们共通需要的 中间件
、 工具
等文件放在一个公共的路径下,使用过程中只需要引用进来即可。
注意: 层暂时还没出现在小程序官方文档,但是可以在
腾讯云 - 云函数
找到文档。
实操
这里我们使用 Nodejs8.9
来做示范
1. 先确认小程序已经开通了云开发
2. 登录腾讯云
-
打开登录界面 选择【其他登录方式 - 微信公众号 - 扫码选择对应的小程序(不是公众号)】.
注意:小程序云开发和腾讯云的账户体系其实是有关联的,可以把腾讯云面板看作更高级的云开发面板
3. 编写层代码
- 编写以下代码,并保存为
demo.js
exports.main = async (event) => {
return "hello,layer."
}
- 把
demo.js
打包成demo.zip压缩包
4. 创建分层
- 打开云函数面板.
- 点击左侧菜单的『层』
- 地域选择『上海』
- 点击『新建按钮』
- 层名称:demo
- 提交方法:本地上传zip包
- 层代码:选择上一步打包的
demo.zip
压缩包 - 运行环境:Nodejs8.9
- 点击提交
注意: 有些压缩软件压缩后,会多一层文件夹,需要注意下,压缩包内打开应该直接就是文件
demo.js
没有多一层文件夹。
5. 小程序·云开发面板创建云函数
- 创建云函数
- 修改
云函数 demo 下的 index.js
代码并上传
var hello = require("demo.js")
exports.main = (event, context, callback) => {
return hello.main()
};
6. 云函数绑定层
- 回到 腾讯云 云函数面板,选择左侧菜单
函数服务
- 注意左上角的 命名空间 选择小程序云开发的命名空间,地域:上海
- 选择刚创建的
demo
云函数 - 点击
层管理
- 绑定刚创建的
demo
层
7. 调试
- 还是
demo
的云函数里,点击函数代码
项 - 点击测试,返回结果
"hello,layer."
既成功
Q&A
-
-
问:为什么云函数里可以直接
require("demo.js")
引入demo.js
? -
答:绑定层后,会根据顺序把层文件放在系统目录
/opt
下,然后该目录在 Node.js 环境下又在环境变量里。当引入demo.js
在当前目录找不到时,会尝试在环境变量内查找。所以云函数可以找到该文件。 -
再问:如果层的文件名和云函数列表的文件名冲突,岂不是会引入错误?
-
答:是的,这时候可以使用绝对路径确保引入的是层文件
require("/opt/demo.js")
-
再再问:如果云函数绑定了多个层,每个层里都有
demo.js
会怎么样? -
答:会根据层的顺序,逐个覆盖文件,最终
/opt/demo.js
文件是最后一层的文件。 -
再再再问:环境变量除了这个路径,还有哪些路径?
-
答:这里有一份各语言的环境变量路径,可以参考下,具体查看文档
-
关环境变量 路径 THONPATH /var/user:/opt
ASSPATH /var/runtime/java8:/var/runtime/java8/lib/*:/opt
DE_PATH /var/user:/var/user/node_modules:/var/lang/node6/lib/node_modules:/opt:/opt/node_modules
-
-
- 问:云函数只支持
Nodejs8.9
版本吗? - 答:在小程序云开发面板里,确实只能创建。但是可以通过服务端 SDK 创建以下语言支持。
- Python 3.6
- Python 2.7
- Nodejs 10.15
- Nodejs 8.9
- Nodejs 6.10
- Php 7.2
- Php 5.6
- Java 8
- Golang 1
- 问:云函数只支持
-
持续更新…
非常感谢分享!刚刚试了一下,开发者工具创建的云开发环境可以正常使用层管理
小程序云函数跟腾讯云函数是一回事吗?一个是TCF,一个是SCF
谢谢分享~ 有个小问题,如何在本地调试引用了层的云函数?
我在绑定层的时候提示“此命名空间为TCB创建,SCF 控制台暂时不允许操作。”
请问有办法解决吗?
学习了