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

在AWS Lambda+Serverless中使用ES Modules遇'require未定义'错误求助

问题解决:AWS Lambda部署ES Modules代码出现require未定义错误

问题根源

部署后生成的s_getStatus.js是Serverless框架自动创建的代理文件,该文件使用了CommonJS的require语法,但你的项目通过package.json的"type": "module"声明为ES Modules环境,二者冲突导致报错。本地serverless-offline直接加载源码运行,不会生成这个代理文件,因此无问题。

解决方案

1. 移除不兼容的插件

serverless-plugin-tracing插件较陈旧,不兼容ES Modules,且AWS Lambda的X-Ray追踪可通过原生配置开启,无需该插件:

  • 从serverless.yml的plugins数组中删除serverless-plugin-tracing
  • 你已配置provider.tracing.lambda: true和对应的IAM权限,追踪功能仍会正常工作

2. 使用ES Modules兼容的打包插件

添加serverless-esbuild插件,它原生支持ES Modules打包,替代Serverless默认的打包逻辑:

  1. 安装依赖:
    npm install --save-dev serverless-esbuild
    
  2. 修改serverless.yml,添加插件和配置:
    plugins:
      - serverless-esbuild
    
    custom:
      esbuild:
        format: esm       # 指定输出为ES Modules格式
        target: node18    # 匹配Lambda的nodejs18.x运行时
        bundle: true      # 打包依赖和代码
    

3. 优化package.json配置

明确ES模块入口,避免打包歧义:

{
  "main": "handler.js",
  "exports": "./handler.js", // 明确入口文件
  "type": "module"
}

4. 验证打包结果

执行sls package命令生成打包包,解压后检查var/task目录下的文件,确保代理文件(如果存在)使用ES Modules的import而非CommonJS的require。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:27:03