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

Next.js Docker构建疑问:无需安装TS开发依赖如何完成生产构建?

解决方案:Docker多阶段构建

不用把TypeScript及@types依赖移出开发依赖,用多阶段构建就能同时满足CI类型检查和生产环境轻量化的需求。

修改后的Dockerfile:

# 第一阶段:负责构建应用,安装全部依赖(包括dev)
FROM node:16.16.0 AS builder
WORKDIR /var/www/project-front
COPY package.json yarn.lock ./
# 安装所有依赖,包括devDependencies(构建需要TypeScript做类型校验)
RUN yarn install --frozen-lockfile
COPY ./ /var/www/project-front
# 执行构建,自动做TypeScript类型检查,失败则终止构建,符合CI要求
RUN yarn build

# 第二阶段:生产运行镜像,只保留必要文件
FROM node:16.16.0
RUN npm install --location=global pm2
WORKDIR /var/www/project-front
# 复制依赖配置文件,只安装生产依赖
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --production
# 从构建阶段复制已完成的构建产物
COPY --from=builder /var/www/project-front/.next ./.next
COPY --from=builder /var/www/project-front/public ./public
COPY --from=builder /var/www/project-front/next.config.js ./next.config.js

EXPOSE 3000
USER node

CMD [ "pm2-runtime", "start", "npm", "--", "start" ]

方案优势:

  • CI类型检查不丢失:构建阶段会安装所有开发依赖,yarn build过程中Next.js会自动执行TypeScript类型校验,校验不通过直接终止构建,完全保留CI的检查能力,不用开ignoreBuildErrors。
  • 生产镜像轻量化:最终的生产镜像只包含运行所需的生产依赖,构建阶段的dev依赖不会被带入,镜像体积更小,运行时也没有冗余包。

可选优化:

如果项目有单独的类型检查命令(比如yarn type-check),可以在构建阶段单独执行,提前排查类型问题:

# 在builder阶段的COPY之后、build之前添加
RUN yarn type-check

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:25:17