Firebase Cloud Function部署后读取.env环境变量为undefined
核心原因
你用的firebase-functions@3.21.2版本根本不支持.env文件自动注入运行时环境变量。.env自动加载到process.env的特性是firebase-functions@4.0.0版本才正式上线的,哪怕部署时CLI输出Loaded environment variables from .env,也只是CLI工具自己识别到了文件,低版本SDK不会把这些变量挂载到运行时的process.env对象上,读出来自然是undefined。
解决方法
方案1:升级SDK匹配官方.env能力(推荐)
- 进入项目的functions目录,执行依赖升级:
npm install firebase-functions@latest firebase-admin@latest
- 升级后确认
firebase-functions版本号≥4.0.0 - 检查.env文件位置:必须放在
functions文件夹根目录,和该目录下的package.json同级,不要放在整个项目的最外层根目录 - 检查.env文件格式:变量定义不要加多余的引号、前后空格,正确写法参考:
ENV_VAR=your_actual_value API_KEY=abc123def456
- 加
--force参数跳过缓存重新部署:
firebase deploy --force
方案2:不升级依赖,用3.x版本兼容的配置方式
如果受项目依赖限制没法升到4.x版本,就不要用.env方案,改用3.x原生支持的配置方式:
- 通过CLI设置环境变量:
firebase functions:config:set custom.env_var="your_actual_value"
- 代码里不要用
process.env读取,改用SDK自带的配置接口取值:
const functions = require('firebase-functions'); const envVar = functions.config().custom.env_var;
- 本地调试时,把线上配置拉到本地生成配置文件,放在functions目录根目录即可自动加载:
firebase functions:config:get > .runtimeconfig.json
额外排查项
如果升级后还是读不到,逐一核对:
- 默认部署只会加载
.env、.env.<你的firebase项目ID>两个文件,.env.local、.env.development这类带自定义后缀的文件不会在正式部署时加载 - 环境变量名只能包含大写字母、数字、下划线,带横杠、小写、特殊字符的变量名会被SDK自动过滤
- 如果用TypeScript写代码,不要在构建脚本、编译配置文件里读
process.env,只有部署到Cloud Functions运行时的业务代码里才能读到注入的变量
内容的提问来源于stack exchange,提问作者agentp
相关产品推荐
相关产品推荐

