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

使用Serverless部署NextJS到AWS后pnpm依赖缺失问题求助

解决NextJS通过Serverless部署到AWS后子依赖缺失问题

核心原因

本地运行时pnpm的软链接机制可访问嵌套子依赖,但Serverless打包时直接复制node_modules目录,pnpm默认的严格非扁平依赖结构会导致部分深层子依赖未被纳入部署包,最终引发模块找不到的错误。

解决方案

1. 启用pnpm依赖提升模式

使用--shamefully-hoist参数强制将所有依赖(含子依赖)提升到node_modules根目录,让Serverless打包工具能捕获到全部依赖:

# 清理现有依赖并重新安装
pnpm install --shamefully-hoist

之后重新执行构建与部署:

pnpm run build
sls deploy

2. 调整Serverless打包配置

在serverless.yml中明确打包规则,确保所有依赖被包含:

service: your-nextjs-service

package:
  excludeDevDependencies: true
  include:
    - node_modules/**
    - .next/**
    - public/**
    - next.config.js
    - package.json

若使用serverless-webpack插件,需在webpack.config.js中补充依赖解析配置,避免webpack忽略嵌套依赖:

const path = require('path');

module.exports = {
  target: 'node',
  resolve: {
    modules: [path.resolve(__dirname, 'node_modules')],
    extensions: ['.js', '.jsx', '.ts', '.tsx'],
  },
  externals: {
    'aws-sdk': 'aws-sdk', // 复用Lambda环境自带的AWS SDK
  },
};

3. 强制NextJS Webpack包含缺失依赖

在next.config.js中指定缺失的子依赖,让NextJS构建过程强制打包该模块:

module.exports = {
  webpack: (config) => {
    // 以chalk为例,添加缺失依赖的解析规则
    config.resolve.fallback = {
      ...config.resolve.fallback,
      chalk: require.resolve('chalk'),
    };
    return config;
  },
};

若存在多个缺失模块,可依次添加到resolve.fallback对象中。

4. 清理缓存后重新构建

缓存可能导致依赖未正确更新,执行以下命令清理后重新操作:

# 清理pnpm全局缓存
pnpm store prune
# 清理NextJS构建缓存
rm -rf .next
# 重新安装依赖并构建部署
pnpm install --shamefully-hoist
pnpm run build
sls deploy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:20:09