Windows10环境AWS CDK Typescript Lambda VSCode本地断点调试配置问题
解决方案
1. 调整CDK Lambda打包配置
CDK 使用 esbuild 打包 TypeScript Lambda,你需要补充配置确保生成的 source map 包含完整的源文件路径信息,修改你的 NodejsFunction 定义如下:
const presignupLambda = new lambdaNJS.NodejsFunction(this, 'PresignupLambda', { functionName: 'presignup', entry: 'lambdas/presignup/main.ts', handler: 'handler', environment: { NODE_OPTIONS: '--enable-source-maps' }, bundling: { sourceMap: true, minify: true, // 新增esbuild参数,将源文件内容嵌入source map esbuildArgs: { "sources-content": "true" } } });
你项目根目录的 tsconfig.json 是给 CDK 框架本身编译用的,不会影响 Lambda 代码的打包过程,无需调整。
2. 修改VSCode launch.json配置
断点无法命中的核心原因是 VSCode 无法将打包后的 source map 路径和本地 TypeScript 源码路径对应上,需要补充 source map 路径映射规则,修改后的配置如下:
{ "name": "Attach to SAM CLI", "type": "node", "request": "attach", "address": "localhost", "port": 5858, "localRoot": "${workspaceFolder}", "remoteRoot": "/var/task", "protocol": "inspector", "stopOnEntry": false, "outFiles": [ "${workspaceFolder}/cdk.out/**/*.js" ], // 新增以下配置 "sourceMaps": true, "resolveSourceMapLocations": [ "${workspaceFolder}/cdk.out/**/*.map", "!**/node_modules/**" ], "sourceMapPathOverrides": { // 映射SAM容器内路径到本地cdk.out目录 "/var/task/*": "${workspaceFolder}/cdk.out/*", // 适配esbuild生成的相对源路径,匹配你项目的Lambda源码位置 "../*": "${workspaceFolder}/*", "../../*": "${workspaceFolder}/*" } }
3. 验证调试流程
每次修改 Lambda 代码后先重新执行你的 PowerShell 脚本生成最新的 template.yaml,再按以下顺序操作:
- 执行SAM本地运行命令:
sam local invoke PresignupLambda947F13DA --event events/presignup.json --debug-port 5858 - 等待控制台输出
waiting for debugger to connect...类提示后,再按F5启动VSCode调试 - 此时你在
main.ts中设置的断点即可正常命中
注意:Windows 系统下路径分隔符的差异已由 VSCode 自动兼容,无需额外修改路径格式。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

