WARNING

# 当前文档已迁移到新的文档站点 (opens new window),此内容不再维护!

# 函数基础

⚠️ 注意事项

所有 CloudBase CLI 命令均在配置文件所在目录执行。

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。云开发中的云函数可让用户将自身的业务逻辑代码上传,并通过云开发的调用触发函数,从而实现后端的业务运作。

# 查看函数

您可以使用下面的命令列出所有云函数,查看函数的基本信息:

cloudbase functions:list

您会得到类似下面的输出:

┌─────────┬───────────┬───────────┬─────────────────────┬─────────────────────┬──────────┐
│    Id   │   Name    │  Runtime  │       AddTime       │       ModTime       │  Status  │
├─────────┼───────────┼───────────┼─────────────────────┼─────────────────────┼──────────┤
│ lam-xxx │   hello   │ Nodejs8.9 │ 2019-08-20 10:27:23 │ 2019-08-20 10:27:23 │ 部署完成  │
├─────────┼───────────┼───────────┼─────────────────────┼─────────────────────┼──────────┤
│ lam-xxx │   test    │   Java8   │ 2019-08-19 20:31:52 │ 2019-08-19 21:15:39 │ 部署完成  │
├─────────┼───────────┼───────────┼─────────────────────┼─────────────────────┼──────────┤
│ lam-xxx │    db     │    Php7   │ 2019-08-09 15:09:09 │ 2019-08-09 15:41:41 │ 部署完成  │
└─────────┴───────────┴───────────┴─────────────────────┴─────────────────────┴──────────┘

# 指定返回条数和偏移量

默认情况下,functions:list 命令只会列出前 20 个函数,如果你的函数较多,需要列出其他的函数,你可以通过下面的选项指定命令返回的数据长度以及数据的偏移量:

-l, --limit <limit>    返回数据长度,默认值为 20
-o, --offset <offset>  数据偏移量,默认值为 0

如:

# 返回前 10 个函数的信息
cloudbase functions:list -l 10
# 返回第 3 - 22 个函数的信息(包含 3 和 22)
cloudbase functions:list -l 20 -o 2

# 下载云函数代码

您可以通过下面的命令下载云函数代码:

cloudbase functions:download <functionName> [destPath]

默认情况下,函数代码会下载到 functionRoot (opens new window) 下,以函数名称作为存储文件夹,你可以指定函数存放的文件夹地址,函数的所有代码文件会直接下载到指定的文件夹中。

# 部署函数

注意 functions:deploy 命令部署函数的文件大小总计不能超过 20M,否则可能会部署失败。

您可以通过下面的命令部署函数:

cloudbase functions:deploy <functionName>

functions:deploy 会读取 cloudbaserc.json 文件中指定函数的配置,functions:deploy 命令会完成以下几项工作:

  1. 将函数打包成压缩文件,并上传函数代码。
  2. 部署函数配置,包括超时时间、网络配置等。
  3. 部署函数触发器。

举个例子 🌰:

# 部署 app 函数
cloudbase functions:deploy app

使用 functions:deploy 时,functionName 选项是可以省略的,当 functionName 省略时,Cloudbase CLI 会部署配置文件中的全部函数:

# 部署配置文件中的全部函数
cloudbase functions:deploy

# 覆盖同名函数

部署函数时,很可能会遇到已经存在同名云函数的情况,此时 Cloudbase CLI 会终止部署,询问是否覆盖同名函数,您可以选择覆盖已有的云函数或者终止部署,覆盖操作将会删除原有的云函数,并创建新的云函数。

如果您确定要覆盖可能存在的同名云函数,您可以在命令后附加 --force 选项指定 Cloudbase CLI 覆盖已存在的云函数。

cloudbase functions:deploy dev --force

注意:覆盖函数时,也会覆盖函数的配置和触发器。

# 默认选项

Cloudbase CLI 为 Node.js 云函数提供了默认选项,你在部署 Node.js 云函数时可以不用指定云函数的配置,使用默认配置即可部署云函数。

云函数默认配置:

{
  config: {
    // 超时时间 5S
    timeout: 5,
    // 运行时
    runtime: 'Nodejs8.9',
    // 自动安装依赖
    installDependency: true
  },
  handler: 'index.main',
  // 忽略 node_modules 目录
  ignore: ['node_modules', 'node_modules/**/*', '.git']
}

# 触发函数

您可以在本地通过 Cloudbase CLI 直接触发您的云函数:

# 触发 app 函数
cloudbase functions:invoke app

# 触发配置文件中的全部函数
cloudbase functions:invoke

# 查看函数详情

前面提到的 functions:list 命令只能查看函数的简单信息,如果您想查看函数的详细信息,您可以使用下面的命令:

# 查看 app 函数的详情
cloudbase functions:detail app

# 查看配置文件中的所有函数的详情
cloudbase functions:detail

输出


状态:部署完成
代码大小(B):1695
环境变量(key=value):key=value
函数名称:test
执行方法:index.main
内存配置(MB):256
修改时间:2019-08-19 21:15:39
环境 Id:dev-xxx
运行环境:Nodejs8.9
超时时间(S):20
网络配置:无
触发器:
myTrigger:{"cron": "0 0 2 1 * * *"}
函数代码(Java 函数以及入口大于 1 M 的函数不会显示):
'use strict';
exports.main = async (event, context, callback) => {
    console.log(event);
    return 'hello world'
};

# 删除函数

您可以通过下面的命令删除函数

# 删除 app 函数
cloudbase functions:delete app

# 删除配置文件中的所有的函数
cloudbase functions:delete

# 复制函数

您可以通过下面的命令快速复制一个已经存在的函数:

# 复制 app 函数为 app2 函数
functions:copy app app2

使用 functions:copy 命令时需要指定原函数名称以及复制后新的函数名称。当前环境 Id 和目标环境环境 Id 是可选的,如果没有指定目标环境 Id,函数会被复制到当前环境中。

如果新函数的名称已经存在,则复制操作会被终止。如果你想要覆盖已经存在的函数,你可以使用下面的命令

# 覆盖同名函数

# 复制 app 函数为 app2 函数,如果 app2 函数存在,覆盖已经存在的 app2 函数
functions:copy app app2 --force

注意:复制函数操作不会复制函数的函数的触发器。