将环境变量传递给 NOW

Passing environment variables to NOW

我正在尝试传递 firebase 环境变量以使用 now 进行部署。

我已经使用 base64 手动编码了这些变量,并使用以下命令将它们添加到现在:
now secrets add firebase_api_key_dev "mybase64string"
编码后的字符串被放置在语音标记 ""

这些在我的 CLI 工具中,我可以使用列表命令查看它们:
now secrets ls

> 7 secrets found under project-name [499ms]
  name                              created
  firebase_api_key_dev              6d ago
  firebase_auth_domain_dev          6d ago
  ...

在我的 firebase 配置中,我使用了以下代码:

const config = {
  apiKey: Buffer.from(process.env.FIREBASE_API_KEY, "base64").toString(),
  authDomain: Buffer.from(process.env.FIREBASE_AUTH_DOMAIN,"base64").toString(),
  ...
}

在我的 now.json 文件中,我有以下代码:

{
  "env": {
    "FIREBASE_API_KEY": "@firebase_api_key_dev",
    "FIREBASE_AUTH_DOMAIN": "@firebase_auth_domain_dev",
    ...
  }
}

在我的本地环境中一切正常(当我 运行 next 时),因为我也有一个包含这些变量的 .env 文件,但是当我部署代码时,我得到我的 now 控制台出现以下错误:

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined

这是否表明我的环境变量没有被读取?这里有什么问题?看起来它们根本不存在

解决方案是将我现有的 now.json 替换为:

{
  "build":{
    "env": {
      "FIREBASE_API_KEY": "@firebase_api_key",
      "FIREBASE_AUTH_DOMAIN": "@firebase_auth_domain",
      "FIREBASE_DATABASE_URL": "@firebase_database_url",
      "FIREBASE_PROJECT_ID": "@firebase_project_id",
      "FIREBASE_STORAGE_BUCKET": "@firebase_storage_bucket",
      "FIREBASE_MESSAGING_SENDER_ID": "@firebase_messaging_sender_id",
      "FIREBASE_APP_ID": "@firebase_app_id",
      "FIREBASE_API_KEY_DEV": "@firebase_api_key_dev",
      "FIREBASE_AUTH_DOMAIN_DEV": "@firebase_auth_domain_dev",
      "FIREBASE_DATABASE_URL_DEV": "@firebase_database_url_dev",
      "FIREBASE_PROJECT_ID_DEV": "@firebase_project_id_dev",
      "FIREBASE_STORAGE_BUCKET_DEV": "@firebase_storage_bucket_dev",
      "FIREBASE_MESSAGING_SENDER_ID_DEV": "@firebase_messaging_sender_id_dev",
      "FIREBASE_APP_ID_DEV": "@firebase_app_id_dev"
    }
  }  
}

我错过了 build header。

我不得不联系 ZEIT 支持来帮助我确定这个问题。