API Platform 3.2生产构建失败:nuxt命令未找到
API Platform 3.2 部署Nuxt集成应用时
nuxt: not found 错误排查 我在部署集成Nuxt的API Platform 3.2应用时,执行以下部署命令:
SERVER_NAME=your-domain-name.example.com \ APP_SECRET=ChangeMe \ POSTGRES_PASSWORD=ChangeMe \ CADDY_MERCURE_JWT_SECRET=ChangeThisMercureHubJWTSecretKey \ docker compose -f compose.yaml -f compose.prod.yaml up --wait
出现了nuxt: not found的构建错误,具体错误输出如下:
ERROR [pwa builder 4/4] RUN PNPM install --frozen-lockfile --offline --prod && pnpm run build 4.9s > [pwa builder 4/4] RUN PNPM install --frozen-lockfile --offline --prod && pnpm run build: > 3.272 ? The modules directory at "/srv/app/node_modules" will be removed and reinstalled from scratch. Proceed? (Y/n) ‣ true > 4.190 > nuxt-app@ build /srv/app > 4.190 > nuxt build > 4.190 > 4.196 sh: 1: nuxt: not found > `4.199 ELIFECYCLE Command failed. ------ failed to solve: process "/bin/sh -c pnpm install --frozen-lockfile --offline --prod && \tpnpm run build" did not complete successfully: exit code: 1
我的pwa/Dockerfile内容如下:
#syntax=docker/dockerfile:1.4 # Versions FROM node:lts AS node_upstream # Base stage for dev and build FROM node_upstream AS base WORKDIR /srv/app RUN corepack enable && \ corepack prepare --activate pnpm@latest && \ pnpm config -g set store-dir /.pnpm-store # Development image FROM base as dev EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME localhost CMD ["sh", "-c", "pnpm install; pnpm dev"] FROM base AS builder COPY --link pnpm-lock.yaml ./ RUN pnpm fetch --prod COPY --link . . RUN pnpm install --frozen-lockfile --offline --prod && \ pnpm run build # Production image, copy all the files and run nuxt FROM node_upstream AS prod WORKDIR /srv/app ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs; \ adduser --system --uid 1001 nuxt COPY --from=builder --link /srv/app/public ./public USER nuxt EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME localhost CMD ["node", "server.js"]
compose.prod.yaml内容如下:
# Production environment override services: php: build: context: ./api target: frankenphp_prod environment: APP_SECRET: ${APP_SECRET} MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} pwa: build: context: ./pwa target: prod database: environment: MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
这是我首次部署API Platform生产环境,尝试直接在pwa目录执行pnpm install也未解决问题,求协助。
问题根源
错误nuxt: not found是因为在builder阶段使用--prod参数安装依赖时,Nuxt CLI工具(nuxt命令)属于开发依赖,不会被安装,导致执行pnpm run build时找不到命令。
此外Dockerfile还存在两个额外问题:
prod阶段仅复制了public目录,缺少Nuxt构建后的.output目录和启动所需文件,启动时会报错pnpm fetch --prod仅拉取生产依赖,后续无法获取构建必需的开发依赖
修复方案
1. 修改builder阶段的依赖安装逻辑
去掉pnpm fetch和pnpm install的--prod参数,确保安装包括Nuxt CLI在内的所有依赖:
FROM base AS builder COPY --link pnpm-lock.yaml ./ # 去掉--prod,拉取所有依赖 RUN pnpm fetch COPY --link . . # 去掉--prod,安装所有依赖(含开发依赖) RUN pnpm install --frozen-lockfile --offline && \ pnpm run build
2. 完善prod阶段的文件复制
Nuxt构建完成后会生成.output目录(核心运行文件),需要将其复制到生产镜像中:
FROM node_upstream AS prod WORKDIR /srv/app ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs; \ adduser --system --uid 1001 nuxt # 复制构建后的核心输出目录及必要文件 COPY --from=builder --link /srv/app/.output ./ COPY --from=builder --link /srv/app/public ./public USER nuxt EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME localhost # Nuxt 3默认启动命令,根据实际项目调整 CMD ["node", ".output/server/index.mjs"]
3. 可选:优化生产镜像体积(仅保留生产依赖)
如果希望生产镜像只包含运行必需的生产依赖,可以新增一个prod-deps阶段单独安装生产依赖:
FROM base AS builder COPY --link pnpm-lock.yaml ./ RUN pnpm fetch COPY --link . . RUN pnpm install --frozen-lockfile --offline && \ pnpm run build # 新增阶段:仅安装生产依赖 FROM base AS prod-deps COPY --link pnpm-lock.yaml ./ RUN pnpm fetch --prod RUN pnpm install --frozen-lockfile --offline --prod # 生产镜像使用prod-deps的依赖 FROM node_upstream AS prod WORKDIR /srv/app ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs; \ adduser --system --uid 1001 nuxt COPY --from=prod-deps --link /srv/app/node_modules ./node_modules COPY --from=builder --link /srv/app/.output ./ COPY --from=builder --link /srv/app/public ./public USER nuxt EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME localhost CMD ["node", ".output/server/index.mjs"]
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

