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

Next.js 12启用SWC时仅AWS Amplify环境部署失败排查

问题根因

构建失败的核心原因是AWS Amplify默认使用的Amazon Linux 2构建镜像缺少SWC原生二进制运行依赖的libssl.so.1.1(OpenSSL 1.1.x动态链接库),Next.js无法加载原生SWC包时会自动回退到实验性WASM版本SWC,而Amplify构建沙箱对WASM多线程能力存在限制,触发线程池初始化错误、Terser编译崩溃,最终导致构建失败。该问题和项目代码、本地依赖安装逻辑无关,因此本地构建、Vercel部署均可正常运行。

保留SWC能力的解决方案

以下方案均不需要禁用SWC,可完整保留SWC的编译速度与编译特性,按推荐优先级排序:

方案1:通过构建配置安装缺失系统依赖(零代码改动,最稳定)

通过Amplify的构建配置文件在preBuild阶段安装缺失的系统库,让原生SWC包可以正常加载,不需要修改Next.js任何配置。
操作步骤:

  • 在项目根目录创建amplify.yml构建配置文件,写入以下内容:
version: 1
frontend:
  phases:
    preBuild:
      commands:
        # 安装SWC依赖的OpenSSL 1.1动态库
        - yum install -y openssl11 openssl11-devel
        # 配置动态库软链接
        - ln -sf /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
        - ln -sf /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
        - nvm use --lts
        - npm ci --include=optional
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
  • 将配置文件提交到代码仓库,Amplify会自动读取该配置执行构建,构建过程中会直接加载@next/swc-linux-x64-gnu原生包,不会触发WASM回退。

方案2:切换Amplify构建镜像为Amazon Linux 2023

Amazon Linux 2023镜像默认预装了符合SWC要求的OpenSSL版本,不需要手动安装依赖。
操作步骤:

  • 进入Amplify控制台对应应用的「构建设置」页面
  • 找到构建镜像配置项,选择Amazon Linux 2023,保存后重新触发构建即可

方案3:升级Next.js小版本

Next.js 12.3及后续小版本对SWC二进制做了静态链接适配,不再强依赖系统层的libssl.so.1.1,同时修复了WASM版本在受限沙箱环境的线程池初始化bug。如果允许升级版本,直接将package.json中next的版本号从12.2.2修改为^12.3.4,重新执行npm install更新依赖锁文件后提交部署即可。

之前排查操作无效的原因
  • 清理依赖重装、强制npm安装:问题出在操作系统层缺失动态库,和npm包安装完整性无关
  • 手动将SWC Linux二进制包加入optionalDependencies:包文件虽然安装成功,但缺少系统动态库依赖,二进制依然无法执行
  • 关闭swcMinify、移除compiler配置:只要未通过.babelrc完全禁用SWC,Next.js依然会尝试加载SWC做语法转译,加载失败还是会回退到有问题的WASM版本

注意:新增.babelrc禁用SWC的方案会让构建速度下降3-5倍,同时丢失SWC提供的styled-components编译优化、压缩效率提升等特性,非必要不使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:18:16