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

部署NestJS Lambdalith到AWS Lambda遇模块找不到错误求助

问题分析

你遇到的Runtime.ImportModuleError核心原因是serverless.yaml的package配置排除了编译后的dist目录,导致部署包中没有Lambda需要执行的lambda.js文件;但直接移除exclude后,node_modules全部打包又会超出Lambda部署包体积限制(压缩后50MB,解压后250MB)。

解决方案

下面提供两种可行的优化方案,优先推荐方案二(webpack打包),这是NestJS部署Lambda的行业通用做法。

方案一:手动调整package排除规则(适合简单项目)

修改serverless.yaml的package配置,移除dist的排除规则,同时只保留生产依赖,排除开发依赖和无用文件:

package:
  exclude:
    - node_modules/**/*dev*  # 排除所有带dev标识的开发依赖文件
    - src/**  # 排除TypeScript源码,只留编译后的产物
    - .git/**
    - .github/**
    - README.md
    - package-lock.json
  include:
    - dist/**  # 强制包含编译后的dist目录

同时,需要在GitHub Action中添加编译步骤,确保dist目录生成后再部署:
修改GitHub Action的deploy步骤:

- run: npm ci
- run: npm run build  # 确保package.json中有"build": "tsc"的脚本
- run: node_modules/.bin/sls deploy --verbose --stage dev

检查你的package.json是否包含build脚本:

"scripts": {
  "build": "tsc",
  // 其他脚本...
}

方案二:使用serverless-webpack打包(推荐,适合复杂项目)

通过webpack做tree-shaking和依赖优化,将代码与必要的生产依赖打包成单个文件,大幅减小部署包体积。

1. 安装依赖

npm install --save-dev serverless-webpack webpack webpack-node-externals ts-loader typescript

2. 创建webpack配置文件

在项目根目录新建webpack.config.js:

const path = require('path');
const nodeExternals = require('webpack-node-externals');

module.exports = {
  entry: './src/lambda.ts',
  target: 'node',
  mode: process.env.NODE_ENV || 'production',
  externals: [nodeExternals()], // 排除node_modules中Lambda环境已支持的核心模块,私有包可调整
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
    extensions: ['.ts', '.js'],
  },
  output: {
    filename: 'lambda.js',
    path: path.resolve(__dirname, '.webpack'),
    libraryTarget: 'commonjs2',
  },
};

3. 修改serverless.yaml配置

service: service-name

plugins:
  - serverless-offline
  - serverless-dotenv-plugin
  - serverless-webpack  # 添加webpack插件

provider:
  name: aws
  runtime: nodejs18.x
  stage: ${opt:stage, 'dev'}
  region: ${opt:region, 'region-here'}
  memorySize: 512
  logRetentionInDays: 1

package:
  individually: false
  excludeDevDependencies: true  # 自动排除开发依赖

functions:
  main:
    handler: src/lambda.handler  # 直接指向源码,webpack会自动编译打包
    events:
      - http:
          method: ANY
          path: /{proxy+}

custom:
  webpack:
    webpackConfig: ./webpack.config.js
    includeModules: true  # 自动处理生产依赖的打包

4. 调整GitHub Action

无需额外添加build步骤,serverless-webpack会在部署时自动编译TypeScript代码:

- run: npm ci
- run: node_modules/.bin/sls deploy --verbose --stage dev
验证方式

部署完成后,可通过AWS Lambda控制台查看部署包的文件结构,确认包含lambda.js(或dist/lambda.js)和必要的依赖文件;调用API时即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:39:51