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
相关产品推荐
相关产品推荐

