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

Next.js 15部署后出现process未定义/process.binding不支持错误

解决Next.js 15 + AWS Amplify部署到K8s(带NGINX反向代理)后process is not defined错误

问题分析

本地开发、Docker及本地K8s Pod运行正常,但部署到带NGINX的K8s集群后,浏览器控制台抛出Uncaught ReferenceError: process is not defined,核心原因是生产构建阶段未正确注入NEXT_PUBLIC_前缀的环境变量,导致客户端代码中残留process.env引用,而浏览器环境不存在process对象。

解决方案

1. 确保构建阶段正确传递环境变量

Next.js的NEXT_PUBLIC_*变量会在生产构建时被替换为实际值,因此必须保证构建环节能读取到这些变量:

  • 如果使用Docker构建,修改Dockerfile,在npm run build前注入环境变量:
    FROM node:20-alpine
    WORKDIR /app
    
    COPY package*.json ./
    RUN npm install
    
    # 声明构建参数并设置为环境变量
    ARG NEXT_PUBLIC_USER_POOL_ID
    ARG NEXT_PUBLIC_USER_POOL_CLIENT_ID
    ENV NEXT_PUBLIC_USER_POOL_ID=$NEXT_PUBLIC_USER_POOL_ID
    ENV NEXT_PUBLIC_USER_POOL_CLIENT_ID=$NEXT_PUBLIC_USER_POOL_CLIENT_ID
    
    COPY . .
    RUN npm run build
    
    EXPOSE 3000
    CMD ["npm", "start"]
    
    构建镜像时传入参数:
    docker build --build-arg NEXT_PUBLIC_USER_POOL_ID=ap-_XXXXXX --build-arg NEXT_PUBLIC_USER_POOL_CLIENT_ID=YYYYYYYYYY .
    
  • 如果使用K8s的构建工具(如Kaniko),需在构建配置中添加对应的环境变量参数,确保构建过程能读取到NEXT_PUBLIC_*变量。

2. 优化Amplify客户端配置代码

调整配置文件,提前校验环境变量,避免未定义值导致的潜在问题:

"use client"
import { Amplify, type ResourcesConfig } from "aws-amplify";

// 提前获取并校验环境变量
const userPoolId = process.env.NEXT_PUBLIC_USER_POOL_ID;
const userPoolClientId = process.env.NEXT_PUBLIC_USER_POOL_CLIENT_ID;

if (!userPoolId || !userPoolClientId) {
  throw new Error("Missing required authentication environment variables");
}

export const authConfig: ResourcesConfig["Auth"] = {
  Cognito: {
    userPoolId,
    userPoolClientId,
  },
};

Amplify.configure({ Auth: authConfig }, { ssr: true });

export default function ConfigAmplifyClientSide() {
  return null;
}

3. 检查NGINX反向代理配置

确保NGINX正确处理Next.js的单页应用路由,避免静态资源加载异常:

server {
  listen 80;
  server_name your-domain.com;

  root /usr/share/nginx/html;
  index index.html;

  # 处理单页应用路由
  location / {
    try_files $uri $uri/ /index.html;
  }

  # 缓存静态资源
  location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
  }
}

4. 验证构建结果

构建完成后,检查生成的静态JS文件(位于.next/static目录),搜索process.env.NEXT_PUBLIC_USER_POOL_ID:

  • 如果搜索不到,说明变量已被正确替换;
  • 如果仍存在,说明构建环节未获取到环境变量,需重新检查环境变量传递流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:25:56