将环境变量传递给 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 支持来帮助我确定这个问题。
我正在尝试传递 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 支持来帮助我确定这个问题。