Firebase Functions部署定时任务报Cannot read property 'pubsub' of undefined错误
问题排查解决步骤
1. 修正模块导入语法
报错核心原因是导入的functions对象为undefined,当前默认导入的写法不匹配firebase-functions的模块导出规则,将导入语句替换为:
import * as functions from "firebase-functions";
TypeScript编辑器没有报错,通常是因为tsconfig.json中开启了allowSyntheticDefaultImports配置,编译阶段做了兼容,但实际运行时Node环境加载模块时没有对应的默认导出,因此拿到的是undefined值。
修正后完整代码如下:
import * as functions from "firebase-functions"; exports.scheduledFunction = functions.pubsub.schedule('every 5 minutes').onRun((context) => { console.log('This will be run every 5 minutes!'); return null; });
2. 验证依赖版本
- 检查functions目录下package.json中的
firebase-functions依赖版本,确保使用3.20.0以上的稳定版本,过低版本不支持定时任务相关API - 执行以下命令更新到最新稳定版:
cd functions && npm install firebase-functions@latest
3. 确认编译输出
报错指向编译后的lib/index.js第106行,可直接打开该文件检查对应位置的导入逻辑:
- 如果导入语句编译后为
const functions = require("firebase-functions").default,说明导入语法错误,修改为import * as functions后会编译为const functions = require("firebase-functions"),即可正常读取pubsub属性
4. 本地预校验
部署前先执行npm run build完成代码编译,再执行firebase emulators:start --only functions在本地模拟器测试运行,确认无报错后再执行部署命令。
内容的提问来源于stack exchange,提问作者Fajar Alnito
相关产品推荐
相关产品推荐

