迁移OpenAI Node.js SDK至v4后,Firebase云函数出现import语法错误
解决Firebase Cloud Functions中OpenAI SDK v4迁移的import语法错误
问题场景
将OpenAI Node.js SDK从v3升级到v4后,在Firebase Cloud Functions中混合使用require和import语句,触发以下错误:
import OpenAI from 'openai'; ^^^^^^ SyntaxError: Cannot use import statement outside a module at Object.compileFunction (node:vm:360:18) at wrapSafe (node:internal/modules/cjs/loader:1088:15) at Module._compile (node:internal/modules/cjs/loader:1123:27) at Module._extensions..js (node:internal/modules/cjs/loader:1213:10) at Module.load (node:internal/modules/cjs/loader:1037:32) at Module._load (node:internal/modules/cjs/loader:878:12) at Module.require (node:internal/modules/cjs/loader:1061:19) at require (node:internal/modules/cjs/helpers:103:18)
你的代码示例:
const { onRequest } = require("firebase-functions/v2/https"); const { initializeApp } = require('firebase-admin/app'); import OpenAI from 'openai' const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
解决方案
Firebase Cloud Functions默认采用CommonJS模块系统,禁止混合使用CommonJS(require)和ES模块(import)语法,需二选其一统一规范:
方案1:统一使用CommonJS(无需修改项目配置)
将OpenAI的导入语句改为CommonJS兼容格式:
const OpenAI = require('openai').default;
完整修改后代码:
const { onRequest } = require("firebase-functions/v2/https"); const { initializeApp } = require('firebase-admin/app'); const OpenAI = require('openai').default; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
方案2:切换为ES模块(需修改项目配置)
- 在项目根目录的
package.json中添加字段:
"type": "module"
- 将所有
require语句替换为import语法:
import { onRequest } from "firebase-functions/v2/https"; import { initializeApp } from 'firebase-admin/app'; import OpenAI from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
- 确保使用最新版Firebase CLI,避免兼容性问题。
原因说明
Node.js在解析模块时,需要明确当前文件是CommonJS还是ES模块。Firebase Cloud Functions默认以CommonJS模式加载文件,此时使用import会触发语法错误;若要使用ES模块,必须通过package.json的type字段声明。
内容的提问来源于stack exchange,提问作者Koh
相关产品推荐
相关产品推荐

