使用Serverless框架开发Node.js Lambda应用遇模块导入错误求助
解决Lambda模块导入错误:"Unable to import module 'api/candidate'"
这个错误我之前开发Serverless应用时也碰到过,本质就是Lambda运行时找不到你指定的api/candidate模块,大概率是文件路径不匹配或者Serverless打包配置出问题了,下面给你一步步的排查和修复方案:
1. 先核对文件结构与Handler配置
首先看你的Serverless.yml里的函数handler配置,比如如果写的是api/candidate.list,那你的项目文件结构必须是这样的:
你的项目根目录/ └── api/ └── candidate.js # 这里必须是candidate.js,而且里面导出了list函数
但你提到你的Lambda代码是index.js,那可能是你把handler配置错了?比如实际文件是api/index.js,那handler应该写成api/index.list才对。另外要注意,Lambda运行在Linux环境,文件名是区分大小写的,别犯把Candidate.js写成candidate.js这种低级错误。
2. 检查模块导入语句是否正确
看你的index.js代码里有没有导入api/candidate的语句?如果是同目录下的文件,一定要用相对路径:
// 正确:如果candidate.js和index.js在同一个api目录下 const candidate = require('./candidate'); // 错误:这种写法会去node_modules里找api/candidate模块,而不是本地文件 const candidate = require('api/candidate');
3. 确认Serverless打包的内容是否正确
有时候本地文件没问题,但打包时漏了文件。你可以手动检查部署包:
- 运行
serverless package命令,生成的压缩包在项目根目录的.serverless文件夹里 - 解压这个zip包,看看里面有没有
api/candidate.js(或者对应的index.js),路径是否和你配置的一致
4. 额外排查:AWS SDK依赖问题(概率较低)
虽然你的错误是模块导入,但如果你的代码里用了AWS SDK v3,Lambda默认是不自带的,需要把它打包进部署包。如果是v2的话,Lambda运行时已经自带,不需要在package.json里额外安装。
如果还是解决不了,把你的完整Serverless.yml配置和项目文件结构贴出来,能更快定位问题~
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

