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

本地AWS SAM部署Lambda遇Cannot find module错误求助

问题排查与解决方法

1. 核对SAM的代码目录配置

SAM默认读取template.yml中函数的CodeUri指定目录,若该路径指向TypeScript源码目录而非编译后的输出目录(如dist/build),SAM本地会直接尝试加载未编译的.ts文件,而Lambda运行环境仅支持.js/.mjs等格式。

  • 修正方案:将CodeUri改为编译后的输出目录,例如CodeUri: dist/functions/user-api,确保编译后的gatewayEventUtil.js在该目录的对应相对路径下存在。

2. 检查TypeScript编译配置

  • 确认tsconfig.json的outDir设置正确,保证编译后的文件输出到指定目录,且目录结构与源码完全一致(比如源码里的util目录,编译后需在输出目录的对应层级保留)。
  • 检查rootDir配置,确保它覆盖所有需要编译的源码文件(包括util目录),避免部分文件未被编译到输出目录。
  • 确保moduleResolution设置为node,Node.js环境依赖该解析策略识别相对路径模块。

3. 规范SAM本地启动流程

需确保启动SAM前已完成TypeScript编译:

  • 手动流程:先执行tsc完成编译,再启动sam local start-api。
  • 集成流程:使用sam build命令完成构建后再启动本地服务,若需自定义编译逻辑,可在buildspec.yml中添加tsc编译命令,确保SAM构建时自动完成TS转JS。

4. 修正模块导入扩展名

TypeScript中导入模块可省略.js扩展名,但编译后的JS文件若保留无扩展名的导入语句,Node.js可能无法正确解析。

  • 修正方案:在tsconfig.json中设置"module": "CommonJS"或"ESNext",同时开启"esModuleInterop": true;也可尝试在TS导入语句中显式添加.js扩展名(编译后会保留该扩展名,Node.js可正确识别)。

5. 清理SAM本地缓存

SAM本地可能缓存旧的构建文件,导致新编译的模块未被加载。

  • 修正方案:删除项目根目录下的.aws-sam缓存目录,重新执行sam build和sam local start-api。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:12:03