使用Serverless Framework部署AWS Lambda后出现Runtime.ImportModuleError:找不到模块'lambda'
Serverless Framework部署AWS Lambda后出现Runtime.ImportModuleError:找不到模块'lambda'
兄弟,这种问题我之前部署Lambda的时候也踩过坑,别慌,咱们从最可能的原因开始一步步排查解决:
1. 先检查Serverless配置文件的handler字段
这是最常见的问题!AWS Lambda通过serverless.yml里的handler字段找到你的代码入口,如果这个配置写错了,就会触发找不到模块的错误。
举个例子,错误的配置可能是这样的(直接写了lambda,没有指定正确的文件+函数名):
functions: myFunction: handler: lambda # ❌ 这里错误,必须是「文件路径.导出的函数名」格式
正确的配置应该指向你的处理函数文件和导出的函数名,比如你的处理函数在src/handler.js里,导出的函数叫main,那配置应该是:
functions: myFunction: handler: src/handler.main # ✅ 正确格式:[相对路径].[函数名]
2. 检查代码里的引入语句
有没有可能你在代码里手误写了require('lambda')或者import from 'lambda'?这种写法会让Lambda运行时去npm包仓库找名为lambda的模块,而不是你自己的本地文件。
如果是要引入自己的本地文件,记得加相对路径,比如:
// 错误写法 const myModule = require('lambda'); // 正确写法(假设lambda.js和当前文件同目录) const myModule = require('./lambda');
3. 排查打包工具的问题(如果用了Webpack等)
如果你用了Serverless Webpack插件来打包代码,要注意两个点:
- 检查webpack配置里的入口文件是否正确指向你的处理函数
- 打包完成后,
serverless.yml里的handler要指向打包后的输出文件路径,比如打包后文件在dist/handler.js,那配置应该是dist/handler.main
4. 确认文件结构和文件名大小写
Lambda运行在Linux环境下,文件名是区分大小写的!比如你配置里写的是src/Handler.js,但实际文件是src/handler.js,这也会导致找不到文件的问题。
建议你手动核对:配置里的文件路径对应的文件是否存在,文件名大小写是否完全一致。
举个正确的示例参考
serverless.yml 片段
service: my-demo-service provider: name: aws runtime: nodejs18.x # 确保和你的Node.js版本一致 functions: helloWorld: handler: src/handler.helloWorld # 路径+函数名 events: - httpApi: path: /hello method: get
src/handler.js 文件
exports.helloWorld = async (event) => { return { statusCode: 200, body: JSON.stringify({ message: "部署成功啦!" }) }; };
按照上面的步骤排查,应该能解决这个问题~
备注:内容来源于stack exchange,提问作者codeinprogress
相关产品推荐
相关产品推荐

