为Firebase + Next.js + Vercel设置生产和开发数据库

mgdq6dx1  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(154)

我们的数据库使用Firestore,并使用Vercel的Next.js托管。我们想要一个完全隔离的开发/生产数据库,因此我们在Firebase上建立了两个独立的项目,这为每个项目提供了两个不同的API密钥。
根据Vercel的生产/预览/开发设置(可能基于NEXT_PUBLIC_VERCEL_ENV),在两种配置之间切换的最佳方式是什么?
我们尝试创建两个包含配置的不同.json文件,并基于NEXT_PUBLIC_VERCEL_ENV环境变量进行切换,但这似乎会在本地开发版本中的客户端呈现页面上为环境变量生成一个undefined值。

const firebaseDevConfig = await import("./configs/dev-config.json");
const firebaseProdConfig = await import("./configs/prod-config.json");

const firebaseConfig =
  process.env.NEXT_PUBLIC_VERCEL_ENV === "production"
    ? firebaseProdConfig
    : firebaseDevConfig;

更新:NEXT_PUBLIC_VERCEL_ENV似乎在部署的预览版本中返回了预期值"preview"。我如何让它在我的本地开发版本中返回“development”?

bttbmeg0

bttbmeg01#

您使用的是.local.env文件还是仅使用.env文件?另外,我建议设置firebase CLI和模拟器,请参阅--〉https://firebase.google.com/docs/emulator-suite

v64noz0r

v64noz0r2#

通过将开发配置作为字符串存储在.env文件中,并通过Vercel的 Jmeter 板设置生产环境变量,我设法解决了这个问题。
最后的代码看起来像这样:

export const firebaseConfig = JSON.parse(
  process.env.NEXT_PUBLIC_FIREBASE_CONFIG!
);

其中NEXT_PUBLIC_FIREBASE_CONFIG是包含dev/prod Firebase配置(JSON字符串)的环境变量的名称。

相关问题