Firebase Cloud Functions - 函数外部的 ENV 变量

Tay*_*ter 4 javascript node.js firebase google-cloud-functions dotenv

我正在尝试使用process.env云函数定义之外的值,但是undefined当我没有在云函数内部使用变量时,它就会得到。

functions/.env

OPENAI_API_KEY=MY_API_KEY
Run Code Online (Sandbox Code Playgroud)

functions/index.js

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { ChatOpenAI } = require("@langchain/openai");

console.log(process.env.OPENAI_API_KEY); // undefined

const llm = new ChatOpenAI({
  openAIApiKey: process.env.OPENAI_API_KEY, // undefined
});


exports.testCall = functions.https.onCall((data, context) => {
  console.log(process.env.OPENAI_API_KEY); // defined with proper value  
});
Run Code Online (Sandbox Code Playgroud)

我是 firebase 和云函数的新手,所以也许有某种我不理解的范例,但我对如何在函数之外使用 env 变量感到困惑。

当我启动 firebase 模拟器时,它显示“已从 .env 加载环境变量”。然而,它仅在函数运行时可用。

Dou*_*son 5

您所描述的是预期行为,无法更改。

在您的特定情况下,这意味着您不应在代码的全局范围内使用环境变量。相反,您可以在第一次调用函数时延迟初始化任何全局范围变量。

let llm;

exports.testCall = functions.https.onCall((data, context) => {
  if (llm === undefined) {
    llm = new ChatOpenAI({
      openAIApiKey: process.env.OPENAI_API_KEY,
    });
  }

  // use llm normally
});
Run Code Online (Sandbox Code Playgroud)