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
相关产品推荐
相关产品推荐

