Flutter In_App_Purchase Firebase后端部署报错:ERR_REQUIRE_ESM
解决Firebase部署时ERR_REQUIRE_ESM:camelcase-keys模块加载问题
核心问题分析
你遇到的ERR_REQUIRE_ESM错误,本质是camelcase-keys当前为纯ES模块,而Firebase Functions默认的CommonJS环境无法直接用静态import或require加载它。同时你之前的导入路径存在错误——它是npm包,并非本地文件。
分步解决
修正导入路径
将app-store.purchase-handler.ts中错误的本地路径导入:import camelCaseKeys from "firebase-backend/functions/src/camelcase-keys";改为直接指向npm包(先注释静态导入,后续用动态导入替代):
// import camelCaseKeys from "camelcase-keys";用动态import()替代静态导入
在需要使用camelCaseKeys的异步函数内部,通过动态导入加载模块(ES模块在CommonJS环境下只能异步加载):export async function handleAppStorePurchase(req, res) { // 动态导入camelcase-keys const { default: camelCaseKeys } = await import('camelcase-keys'); // 正常使用模块处理数据 const purchaseData = camelCaseKeys(req.body, { deep: true }); // ...后续业务逻辑 }检查环境配置
确保functions/package.json满足以下要求:- Node.js版本指定为14或更高(camelcase-keys v7+要求Node.js 14.13.0+),示例配置:
"engines": { "node": "18" }
- Node.js版本指定为14或更高(camelcase-keys v7+要求Node.js 14.13.0+),示例配置:
重新部署
清理旧依赖后重新安装并部署:cd functions rm -rf node_modules package-lock.json npm install firebase deploy --only functions
额外说明
如果之前尝试动态导入未成功,大概率是导入路径错误(指向本地文件而非npm包),或是未在异步函数内执行动态导入——import()返回Promise,必须配合await使用,且只能在异步上下文环境中调用。
内容的提问来源于stack exchange,提问作者Lara Kreisz
相关产品推荐
相关产品推荐

