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

NX monorepo部署Next.js遇Sharp独立模式报错求助

解决NX Monorepo + Next.js Standalone模式下Sharp缺失的问题

核心问题分析

你遇到的Sharp is required to be installed in standalone mode错误,主要是两个原因导致:

  1. Runner镜像缺少Sharp运行依赖的系统库
  2. Sharp的Native模块未被正确复制到Next.js Standalone的依赖路径中

解决方案

1. 给Runner镜像添加Sharp运行时依赖

你的Dockerfile在Deps阶段安装了编译用的vips-dev,但Runner阶段没有安装运行时需要的vips库,导致Sharp无法加载。修改Runner阶段:

FROM base AS runner
WORKDIR /app

ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1

# 先切换root用户安装系统依赖,再切回nextjs
USER root
RUN apk add --no-cache vips
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs

# 后续复制步骤不变...

2. 手动复制Sharp模块到Standalone目录

NX Monorepo的构建逻辑可能没有把Sharp自动纳入Next.js的Standalone依赖追踪中,需要手动复制Sharp到Standalone的node_modules路径:
在Runner阶段的复制步骤后,添加:

# 复制Sharp模块到Standalone应用的node_modules目录
COPY --from=deps /app/node_modules/sharp ./apps/projectx-ui/node_modules/sharp

3. 确认Next.js配置启用Standalone模式

确保你的projectx-ui项目的next.config.js中开启了Standalone输出:

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'standalone', // 必须开启
  images: {
    unoptimized: false, // 确保图片优化功能开启
  },
};

module.exports = nextConfig;

4. 验证Sharp安装路径

启动容器后,进入容器检查Sharp是否在正确路径:

docker exec -it <容器ID> ls apps/projectx-ui/node_modules/sharp/build/Release/

如果能看到sharp-linuxmusl-arm64v8.node文件,说明路径正确;如果没有,检查Deps阶段的依赖安装是否成功,或者调整复制路径(比如你的Sharp可能在根目录node_modules/sharp,而非项目级node_modules)。

修改后的完整Dockerfile示例

# Build Image - Stage 1
FROM node:20-alpine AS base

# Stage 2 - Install Dependencies
FROM base AS deps
RUN apk add --no-cache libc6-compat vips-dev python3 make g++

WORKDIR /app
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc ./
RUN \
    if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
    elif [ -f package-lock.json ]; then npm ci; \
    elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
    else echo "Lockfile not found." && exit 1; \
    fi

# Stage 3 - Build Application
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build:projectx-ui

# Production image
FROM base AS runner
WORKDIR /app

ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1

# 安装运行时依赖
USER root
RUN apk add --no-cache vips
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs

COPY --from=builder --chown=nextjs:nodejs /app/dist/apps/projectx-ui/public ./apps/projectx-ui/public
COPY --from=builder --chown=nextjs:nodejs /app/dist/apps/projectx-ui/.next/standalone/ ./
COPY --from=builder --chown=nextjs:nodejs /app/dist/apps/projectx-ui/.next/static ./dist/apps/projectx-ui/.next/static

# 手动复制Sharp模块
COPY --from=deps /app/node_modules/sharp ./apps/projectx-ui/node_modules/sharp

EXPOSE 4000
ENV PORT 4000

CMD ["node", "apps/projectx-ui/server.js"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:16:09