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

使用Serverless部署AWS Lambda时所有导入模块均报“找不到模块”错误

解决AWS Lambda通过Serverless部署时找不到本地模块(resolvers/typeDefs)的问题

以下是常见原因及对应的解决办法:

1. 打包后模块路径与本地导入路径不匹配

Serverless打包时会调整项目结构,如果你的相对导入路径基于本地开发目录,但打包后的文件位置发生变化,就会导致找不到模块。

  • 解决方法:
    • 解压Serverless生成的部署包(.serverless目录下的zip文件),确认resolvers和typeDefs文件夹是否在预期位置。
    • 调整导入路径为打包后的相对路径,或使用Node.js的path.resolve构建绝对路径:
      const path = require('path');
      const resolvers = require(path.resolve(__dirname, './resolvers/index.js'));
      

2. Serverless打包时未包含目标模块

默认情况下,Serverless可能不会自动包含所有本地文件,需要明确配置要打包的文件。

  • 解决方法:
    在serverless.yml中添加package.include配置,指定需要包含的模块路径:
    package:
      include:
        - src/resolvers/**/*.js  # 匹配resolvers下所有js文件
        - src/typeDefs/**/*.js   # 匹配typeDefs下所有js文件
      # 可选:排除不需要的文件,减小包体积
      exclude:
        - node_modules/**/*.test.js
    

3. ES模块与CommonJS模块不兼容

如果代码混用了ES模块(import/export)和CommonJS(require/module.exports),Lambda运行时或Serverless打包过程可能无法正确解析。

  • 解决方法:
    • 统一模块系统:在项目根目录的package.json中添加"type": "module",强制使用ES模块;若用CommonJS则删除该配置,保持所有导入导出使用require/module.exports。
    • 如果使用Webpack等打包工具,确保配置中指定了正确的模块目标(如target: 'node18'匹配Lambda运行时)。

4. 打包插件配置错误

如果使用了serverless-webpack等插件,Webpack的配置可能未正确处理本地模块解析。

  • 解决方法:
    检查webpack.config.js,确保添加了本地源码目录到模块解析路径:
    module.exports = {
      entry: './handler.js',
      target: 'node18', // 对应你的Lambda运行时版本
      resolve: {
        modules: ['node_modules', 'src'], // 让Webpack能找到src目录下的模块
      },
      // 其他必要配置...
    };
    

快速排查步骤

  1. 查看.serverless目录下的部署包,确认模块是否存在。
  2. 核对serverless.yml的package配置,确保目标模块被包含。
  3. 检查导入路径与打包后的实际文件路径是否一致。
  4. 确认项目模块系统(ES/CommonJS)统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:10:26