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

Serverless Node.js8.10部署AWS时模块缺失问题求助

解决Serverless + Webpack部署Lambda时的模块缺失问题

我之前也碰到过一模一样的问题,这种模块找不到的坑在Serverless + Webpack部署Lambda的时候真的很常见,尤其是当依赖是间接引入的时候(比如你遇到的underscore是promisified-request的子依赖)。咱们一步步来排查解决:

问题根源分析

从你的配置和错误日志来看,核心问题出在Webpack的nodeExternals配置和Serverless Webpack插件的依赖打包逻辑不匹配:

  • 你用了nodeExternals(),它默认会把所有node_modules里的模块排除在Webpack打包之外;
  • 但Serverless Webpack的webpackIncludeModules需要明确知道哪些依赖要被包含到最终的部署包中,尤其是间接依赖的模块,它可能不会自动识别。

具体解决方案

1. 调整Webpack的Externals配置

修改你的webpack.config.js,让它区分本地开发和部署环境的externals处理:

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

module.exports = {
  entry: slsw.lib.entries,
  target: 'node',
  // 本地开发用nodeExternals,部署时用serverless-webpack的externals逻辑
  externals: [slsw.lib.webpack.isLocal ? nodeExternals() : slsw.lib.externals()],
  node: {
    __dirname: false,
    __filename: false
  },
  devtool: 'inline-source-map',
  module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['babel-loader'],
      include: __dirname,
    }]
  }
};

这样部署时,Serverless Webpack会接管依赖的打包逻辑,确保需要的模块被包含。

2. 强制包含间接依赖的模块

在serverless.yml的webpackIncludeModules配置里,添加forceInclude字段,明确指定那些被间接依赖的模块:

custom:
  webpackIncludeModules:
    packagePath: './package.json'
    # 强制包含这些间接依赖的模块
    forceInclude:
      - underscore
      - babel-runtime

这会确保即使是子依赖的模块,也会被打包到部署包中,不会被遗漏。

3. 确认依赖的安装位置

检查你的package.json,确保underscore和babel-runtime是放在dependencies而不是devDependencies里。因为Serverless默认不会把devDependencies里的包打包到部署环境中。如果之前误放在devDependencies里,执行:

npm install underscore babel-runtime --save

把它们移到dependencies中。

4. 清理缓存重新部署

有时候旧的打包缓存会导致奇怪的问题,先清理缓存再重新部署:

  • 删除项目根目录下的.webpack文件夹;
  • 执行serverless remove删除已部署的资源;
  • 再运行serverless deploy --stage <你的环境>重新部署。

验证步骤

部署完成后,你可以通过Serverless CLI查看部署包的内容,确认依赖是否被包含:

serverless package --stage <你的环境>

然后解压.serverless目录下的zip包,检查node_modules里是否有underscore和babel-runtime文件夹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:08