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

调试TypeScript编写的Node.js AWS-SAM Lambda函数:解决模块找不到问题

TypeScript版AWS SAM项目本地调试配置方案

当然可以通过launch.json配置实现本地调试,你遇到的「模块找不到」问题是因为SAM默认直接调用JavaScript文件,而Node.js原生不识别TypeScript,且当前配置指向的是JS handler而非TS文件。下面是具体解决步骤:

1. 修正launch.json配置

调整配置,让调试器支持TS文件的执行与源码映射:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "aws-sam",
      "request": "direct-invoke",
      "name": "blocksGet",
      "invokeTarget": {
        "target": "code",
        "projectRoot": "${workspaceFolder}/src/lambda/blocks/",
        // 改为你的TS文件名(不带.ts后缀).handler
        "lambdaHandler": "blocks.handler"
      },
      "lambda": {
        "runtime": "nodejs14.x",
        "payload": {},
        "environmentVariables": {
          // 注入ts-node,让Node能直接执行TS
          "NODE_OPTIONS": "--require ts-node/register"
        }
      },
      // 开启源码映射,调试时定位到TS源码
      "sourceMaps": true,
      "outFiles": ["${workspaceFolder}/src/lambda/blocks/**/*.js"]
    }
  ]
}

2. 安装TS依赖

在你的Lambda函数目录(src/lambda/blocks/)下安装必要的开发依赖:

npm install --save-dev typescript ts-node @types/node @types/aws-lambda

3. 添加tsconfig.json配置

在同一个Lambda目录下创建tsconfig.json,确保编译规则适配Lambda环境:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "sourceMap": true,
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "include": ["*.ts"],
  "exclude": ["node_modules"]
}

4. 可选:预编译后调试

如果不想用ts-node实时编译,也可以先通过SAM构建TS到JS,再调试编译产物:

  1. 执行sam build命令,SAM会自动编译TS到.aws-sam/build/目录
  2. 修改launch.json的projectRoot为.aws-sam/build/blocksGet/
  3. 保持lambdaHandler为blocksjs.handler(对应编译后的JS文件)

关键检查点

  • 确保TS文件中的handler函数是export const handler = ...的格式
  • 确认所有依赖都已正确安装,没有缺失
  • sourceMap必须开启,否则调试时只能看到编译后的JS代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:33