# 配置文件

为了应对复杂的使用场景,我们提供了项目级的 cloudbaserc.json 配置文件,可以在 CLI 和 VS Code 插件中共享使用。

配置文件包含了使用云开发 CLI 或 VS Code 插件的过程中的相关配置,可以简化 CLI 和 VS Code 的使用。

默认情况下,使用 cloudbase init 初始化项目时,会生成 cloudbaserc.json 文件作为配置文件,您也可以使用 --config-file 指定其他文件作为配置文件,文件必须满足格式要求。

# 动态变量

CLI 0.9.1+ 版本引入了 2.0 新版本配置文件,支持了动态变量的特性。在 cloudbaserc.json 中声明 "version": "2.0" 即可启用新的特性,新版配置文件只支持 JSON 格式。

动态变量特性允许在 cloudbaserc.json 配置文件中使用动态变量,从环境变量或其他数据源获取动态的数据。使用 {{}} 包围的值定义为动态变量,可以引用数据源中的值。如下所示

{
  "version": "2.0",
  "envId": "envId",
  "functionRoot": "./functions",
  "functions": [
    {
      "name": "{{variable}}"
    }
  ]
}

# 数据源

CloudBase 定义多个数据源的命名空间,用于区分不同的数据源。你可以通过 命名空间.变量名 引用数据,如 {{tcb.envId}}

命名空间 变量名 含义
tcb envId 配置文件或通过命令行参数指定的环境 Id
util uid 24 位的随机字符串
env * .env 类型文件中加载的环境变量

# 环境变量

CloudBase 对环境变量做了特别支持,以解决不同开发阶段、不同配置,使用 CLI & Framework 部署资源的问题。CloudBase 支持使用 .env (opens new window) 类型文件作为主要数据源,使用不同的后缀区分不同的阶段、场景,如 .env.development 可以表示开发阶段的配置,.env.production 可以表示生产环境的配置等。

CloudBase 定义了一些约束:默认情况下,CLI & Framework 会自动加载 .env.env.local 文件中的数据,开发者可以通过使用 --mode <mode> 选项添加特定环境的配置。

.env                # 在所有的环境中被载入
.env.local          # 在所有的环境中被载入,可以加入 .gitignore 忽略
.env.[mode]         # 只在指定的模式中被载入

在加载数据源时,.env.env.local 会被直接加载(如果存在的话),当指定 --mode [mode] 时,会再加载 .env.[mode] 文件,并按照如下的顺序合并覆盖同名变量:.env.[mode] > .env.local > .env,即 .env.[mode] 中的同名变量会覆盖 .env.local.env 文件中的同名变量,以此类推。

当使用 tcb framework deploy --mode test 命令时,会自动加载 .env.env.local 以及 .env.test 等三个文件中的环境变量合并使用。

TIP

我们建议你将秘钥等私密配置放在 .env.local 文件中,并将 .env.local 加入 .gitignore 配置中。

.env.local 文件中存在以下变量

DB_HOST = localhost
DB_USER = root
DB_PASSWORD = s1mpl3

则可以在配置文件中使用

{
  "version": "2.0",
  "envId": "xxx",
  "functionRoot": "./functions",
  "functions": [
    {
      "name": "test",
      "envVariables": {
        "PASSWORD": "{{env.DB_PASSWORD}}"
      }
    }
  ]
}

# 扩展 env 语法

一般情况下,你可以直接在 env 文件中使用键值对

FOO=bar
VUE_APP_SECRET=secret

但是,当我们需要使用复杂的环境变量时,简单的键值对就有些力不从心了。所以,CloudBase 扩展了 .env 支持的语法,支持了复合键值对,你可以通过 . 为同名键添加属性,如

Book.Name=Test
Book.Publish=2020
Book.Authors.0=Jack
Book.Authors.1=Mike

会被编译为包含以下属性的 Book 对象

{
  "Name": "Test",
  "Publish": "2020",
  "Authors": ["Jack", "Mike"]
}

你可以在 cloudbaserc.json 直接使用 {{env.Book.Name}} 引用相关属性。

WARNING

当使用的 .env 值为对象时,在编译时会被转换成 JSON 字符串,如 {{env.Book}} 会被编译为 {"Name":"Test","Publish":"2020","Authors":["Jack","Mike"]}

# 字段

下面是 CloudBase 配置文件支持的字段以及其含义。

# version

类型String

version 表示当前配置文件的版本,目前支持的版本号有:"2.0"。当 version 字段不存在时,默认当前配置文件为 "1.0" 版本。

# envId

类型: String

envId 代表环境 ID,是环境的唯一标识。

# region

类型String

region 指定了当前环境的地域信息,上海地域的环境可以不填,其他地域的环境则必须填写。

# functionRoot

类型String

云函数函数代码存放的文件夹路径,相对于根目录的路径。

# functions

类型Array<CloudFunction>

函数配置项组成的数组,有关函数配置项的详细信息,请参考函数配置项文档 (opens new window)

# 简单参考配置

下面是一个简单的 CLI 配置文件包含的基本信息:

{
  "version": "2.0",
  "envId": "dev-xxxx",
  "functionRoot": "functions",
  "functions": [
    {
      "name": "app",
      "timeout": 5,
      "envVariables": {
        "key": "value"
      }
    }
  ]
}