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

CDK生成TypeScript Lambda通过SAM本地调用时找不到index模块

解决SAM Local误将CommonJS Lambda识别为ES模块的问题

以下是针对性的解决步骤,帮你让SAM正确识别CommonJS模块:

  • 检查Lambda Handler配置
    确保CDK中定义Lambda函数时,handler参数设置为index.handler(对应CommonJS导出的exports.handler)。示例CDK代码:

    new lambda.Function(this, 'MyLambda', {
      runtime: lambda.Runtime.NODEJS_18_X, // 匹配你使用的Node.js版本
      code: lambda.Code.fromAsset('dist'), // 你的TypeScript构建输出目录
      handler: 'index.handler', // 必须是「文件名.导出函数名」格式
    });
    
  • 显式指定package.json的模块类型
    打开Lambda项目的package.json,添加或修改type字段为commonjs,避免SAM误判为ES模块:

    {
      "type": "commonjs",
      // 其他配置项...
    }
    

    如果之前有"type": "module",一定要删除或替换,这是SAM误判的常见原因。

  • 验证构建产物格式
    执行cdk synth后,找到生成的stack.template.json中Lambda的CodeUri指向的目录,检查其中的index.js是否为CommonJS格式——文件中应该是exports.handler = ...或module.exports = { handler: ... }的写法,而非ES模块的export const handler = ...。

  • 清理SAM Local缓存
    SAM可能缓存了旧的运行环境配置,执行带清理参数的调用命令重置:

    sam local invoke -t stack.template.json --clean
    
  • 确认命令路径正确性
    确保调用时指定的template文件路径正确,比如CDK默认会将合成的模板输出到cdk.out目录,正确命令可能是:

    sam local invoke -t cdk.out/stack.template.json
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:34:59