You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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包,并非本地文件。

分步解决

  1. 修正导入路径
    将app-store.purchase-handler.ts中错误的本地路径导入:

    import camelCaseKeys from "firebase-backend/functions/src/camelcase-keys";
    

    改为直接指向npm包(先注释静态导入,后续用动态导入替代):

    // import camelCaseKeys from "camelcase-keys";
    
  2. 用动态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 });
      // ...后续业务逻辑
    }
    
  3. 检查环境配置
    确保functions/package.json满足以下要求:

    • Node.js版本指定为14或更高(camelcase-keys v7+要求Node.js 14.13.0+),示例配置:
      "engines": {
        "node": "18"
      }
      
  4. 重新部署
    清理旧依赖后重新安装并部署:

    cd functions
    rm -rf node_modules package-lock.json
    npm install
    firebase deploy --only functions
    

额外说明

如果之前尝试动态导入未成功,大概率是导入路径错误(指向本地文件而非npm包),或是未在异步函数内执行动态导入——import()返回Promise,必须配合await使用,且只能在异步上下文环境中调用。

内容的提问来源于stack exchange,提问作者Lara Kreisz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:36:06