使用CFC层管理依赖包-Node.js
所有文档

          函数计算 CFC

          使用CFC层管理依赖包-Node.js

          现在 CFC 新增了“层( Layer )” 功能使得可以单独上传并集中管理CFC的依赖包了,这样开发者开发函数代码的时候只需要关注该函数本身的代码,依赖包只需要引用即可。这样有以下的好处。开发者可以只关注函数代码,不用考虑依赖包的部署。

          Node.js依赖包制作

          1.打包 比如要将lodash打包在层中,我们先创建一个目录叫my_nodejs_layer,在my_nodejs_layer目录下创建一个nodejs目录,此时目录结构如下

          ➜ my_nodejs_layer tree
          .
          └── nodejs
          
          1 directory, 0 files

          进入nodejs目录,执行 npm install lodash 再查看一下目录结构

          ➜ my_nodejs_layer tree -d
          .
          └── nodejs
              └── node_modules
                  └── lodash
                      └── fp
          
          4 directories
              

          在my_nodejs_layer目录中将nodejs打包,

          zip -r  nodejs_layer_lodash.zip  nodejs

          这样我们的layer依赖就打好了。

          CFC运行时会将层放在/opt 目录下并根据不同运行环境下的目录来调用,需要按照如下的结构来打包

          • nodejs nodejs/node_modules,nodejs/node8/node_modules

            ```
             my_nodejs_layer.zip
            └──  nodejs/node_modules/lodash
            ```

            2.创建层 到CFC的层控制台,创建一个新的层

          输入层,描述,和lodash的LICENSE https://raw.githubusercontent.com/lodash/lodash/4.17.15-npm/LICENSE 选择刚才的zip包上传,点击创建

          1577949100702.jpg

          这样层就创建成功了。以后如果要更新,在层详情里点“创建版本”进行新建一个层。

          1577949165689.jpg

          注意层版本是不可修改的,如果一个版本被删除,已经引用了该版本的CFC函数依然是能工作的,但新建函数中是不能去引用这个被删除的层版本。

          3.创建函数 到函数菜单下创建新的函数,选择语言nodejs12

          1577949214271.jpg

          修改代码如下

          var process = require('child_process');
          
          exports.handler = (event, context, callback) => {
            process.exec('ls -l /opt', function (error, stdout, stderr) {
              if (error !== null) {
                console.log('exec error: ' + error);
                callback(null, error);
              }else{
                console.log('exec success: '+ stdout)
                callback(null, stdout);
              }
            });
          };

          此时层还没有引入函数,先运行一下看看

          1577950210035.jpg

          /opt 目录下没有内容

          4.引入layer,在函数的层配置里点击添加层

          1577949652561.jpg

          在弹窗中选择刚刚创建的层nodejs-lodash 选择版本1,点击确定

          1577949707234.jpg

          最多可以添加5个层,如果有多个层,如果有同名文件存在序号大的会覆盖序号小的。可以点击上下箭头修改顺序

          1577949733608.jpg

          确定层之后,点击保存,保存层配置。

          5.测试 此时执行函数的时候,层会被解压到/opt目录下,修改一下函数代码,增加 require lodash

          var process = require('child_process');
          var _ = require('lodash');
          
          exports.handler = (event, context, callback) => {
            process.exec('ls -l /opt', function (error, stdout, stderr) {
              if (error !== null) {
                console.log('exec error: ' + error);
                callback(null, error);
              }else{
                console.log('exec success: '+ stdout)
                console.log(_.chunk(['a', 'b', 'c', 'd'], 2))
                callback(null, stdout);
              }
            });
          };

          1577950106761.jpg

          执行函数

          1577950138378.jpg

          能看到输出了_.chunk(['a', 'b', 'c', 'd'], 2) 结果, /opt下存在nodejs目录。这个就是保存依赖包的目录。

          上一篇
          层操作指南
          下一篇
          使用CFC层管理依赖包-Python