Lambda函数已安装mysql依赖打包上传后仍报Cannot find module 'mysql'错误
Lambda Node.js 函数部署报 "Cannot find module 'mysql'" 解决方案
测试运行返回的报错详情:
{ "errorType": "Error", "errorMessage": "Cannot find module 'mysql'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js", "trace": [ "Error: Cannot find module 'mysql'", "Require stack:", "- /var/task/index.js", "- /var/runtime/UserFunction.js", "- /var/runtime/index.js", " at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)", " at Function.Module._load (internal/modules/cjs/loader.js:725:27)", " at Module.require (internal/modules/cjs/loader.js:952:19)", " at require (internal/modules/cjs/helpers.js:88:18)", " at Runtime.exports.handler (/var/task/index.js:4:17)", " at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)" ] }
核心问题成因
- 压缩包层级嵌套错误:直接把外层项目根文件夹打包成zip时,Lambda解压后会在
/var/task路径下生成嵌套的项目子目录,无法直接定位到入口文件和依赖目录,触发模块找不到的报错 - 依赖安装路径错误:执行
npm install mysql --save时未进入项目根目录,导致包含mysql的node_modules被安装到其他上级路径,最终打出来的zip包缺失依赖文件
标准修复操作步骤
- 在独立项目文件夹内完成
npm init初始化后,将业务代码写入与package.json同级路径下的index.js文件 - 确认当前工作路径为项目根目录,执行干净依赖安装:
npm install mysql --save --production
安装完成后校验当前路径下已生成完整的node_modules文件夹,且文件夹内可找到mysql对应的目录 - 执行压缩操作时,进入项目根目录选中所有核心文件(index.js、package.json、node_modules文件夹)直接打包,不要选中外层项目文件夹整体压缩
- 将生成的zip包上传至Lambda函数配置端,在控制台触发测试运行即可正常加载依赖
校验注意事项
上传完成后可在Lambda控制台的代码浏览区域确认文件结构:解压后的文件第一级路径必须直接包含index.js和node_modules,不能出现文件夹嵌套层级
内容的提问来源于stack exchange,提问作者Dhairya Tripathi
相关产品推荐
相关产品推荐

