1、层管理作用
层管理主要是公共依赖问题,如果有很多函数都使用相同的依赖代码,如果每个函数的都依赖这些代码,这样每个函数的代码体积都比较大,这些代码就可以在一个公共层中,只需要一个层来维护这些代码,这样代码就可以公用,并且函数代码体积也可以精简很多。
2、编写层代码
在文件夹下 layer 编写如下代码:
untils.js
exports.callName = function(name){
console.log(name);
return "call name " + name;
}
编写如下函数代码,引用层中的代码
'use strict';
const cloud = require('wx-server-sdk');
const untils = require(process.env.ENV == 'PRO' ? 'layer/untils.js' : '../layer/untils.js');
cloud.init({
env: '----'//使用自己的环境id初始化
})
exports.main = async (event, context) => {
var name = untils.callName("小二")
console.log(name);
return {name:name}
};
2.1、兼容本地测试调用层
在上面示例代码中可以看到在引用 untils 时候,使用了环境变量进行判断 process.env.ENV ,这是因为函数在本地调试和线上运行的时候依赖的代码位置是不一样的,使用了环境变量做了兼容处理,在线上环境配置环境变量 ENV 为 PRO ,本地运行的时候是没有环境变量的,这样就可以兼容线上环境和线下环境。
在设置中配置环境变量。
3、层管理
3.1、层代码打包&以及路径
代码直接打包成 zip 包就可以使用了。注意打包时候如果包含文件夹,引用代码的时候需要包含文件夹路径。
比如代码打包包含文件夹
layer.zip
layer
untils.js
在使用时候 require('layer/untils.js' ); 包含文件夹。
如果 zip 下直接为代码:
layer.zip
untils.js
在使用时候 require('untils.js' );
3.2、创建层
在云函数列表中,创建层
- 层名称:层的名称,在绑定的时候,和代码的路径没有关系。
- 层代码:选择打包好的层代码。
- 运行环境:运行环境尽量选择和云函数相同的云环境。
创建完成后就会出现一个版本,一个层可以有N个版本,每次代码更新的时候,在层中都需创建一个新的版本。
可以下载层的代码,层版本是不能修改的,执行新建和删除。
当删除这个层中的所有版本,这个层会被删除掉,这个需要优化下
层列表
3.3、层绑定
在云函数层管理中,进行层绑定,选择对应的层和版本
绑定的层列表
3.4、测试
在线上进行测试,返回 call name 小二,证明引用层成功。
4、引用层的代码路径
函数的代码是在
/var/user/
层的代码是在
/opt
函数环境变量
所有上面的代码可以通过 require('layer/untils.js' ); 引用,也可以通过 require('/opt/layer/untils.js' ); 引用。
层代码查找逻辑
绑定层后,会根据顺序把层文件放在系统目录 /opt 下,然后该目录在 Node.js 环境下又在环境变量里。当引入 layer/untils.js 在当前目录找不到时,会尝试在环境变量内查找。所以云函数可以找到该文件。
层的文件名和云函数列表的文件名冲突
如果层的文件夹和函数的文件夹一致就会发生冲突,依赖是函数文件夹下的代码 ,这时候使用 require('/opt/layer/untils.js' ); 绝对路径方式进行引用。
《层管理概述》