根据这篇文章,我有一个适合我的解决方案:
https://victorbruce82.medium.com/how-to-deploy-a-react-app-to-different-firebase-hosting-environments-dev-and-prod-da3f4cae9a1e
它使用env-cmd,您不需要云函数来获取当前运行站点的firebase 上的正确环境变量(因为NODE_ENV 在部署到firebase 时总是返回production)
基于使用两个独立的 firebase 项目,一个用于生产,一个用于开发。所以在添加第二个firebase项目后,用于开发:
将开发项目添加到您当前的项目中:firebase use --add,并使用别名 dev。
创建两个 .env 文件:.env.production 和 .env.development,每个文件都有一个变量,例如:
APP_ENV="production"
(在.env.development文件中改成development)
(您还可以将 API 密钥添加到这些 .env 文件中,确保您 .gitignore 他们,这样您的代码库中就没有秘密了)
现在在您的代码中,您可以使用process.env.APP_ENV 引用它:
const websiteConfig = process.env.APP_ENV=== 'production' ? {
themeColor: '#fff'
} : {
themeColor: '#ccc'
}
(您也可以选择在您的 .env 文件中添加 APP_THEME_COLOR 并直接访问它,具体取决于您的偏好)
安装env-cmd
npm i -D env-cmd
现在将 2 个脚本添加到您的 package.json:
"build:dev":"env-cmd -f .env.development npm run build && firebase deploy -P dev",
"build:prod":"env-cmd -f .env.production npm run build && firebase deploy -P prod"
现在您可以将代码部署到两个字面上不同的环境,但也可以让它们具有不同的环境变量。
(注意:在您的 .env 文件中使用 NODE_ENV 不起作用,当部署在 Firebase 主机上时,它将始终返回 production)