# ---- Base ---- FROM node:22-alpine AS base WORKDIR /app # ---- Dependencies ---- FROM base AS dependencies COPY package.json package-lock.json* .npmrc* ./ COPY packages/web/package.json ./packages/web/ COPY packages/shared/package.json ./packages/shared/ RUN npm install --workspace=packages/shared --workspace=packages/web 2>/dev/null || npm install # ---- Build ---- FROM dependencies AS build COPY packages/shared/ ./packages/shared/ COPY packages/web/ ./packages/web/ COPY tsconfig.base.json ./ RUN npm run build --workspace=packages/shared RUN npm run build --workspace=packages/web # ---- Production ---- FROM base AS production ENV NODE_ENV=production COPY --from=build /app/packages/web/.next ./packages/web/.next COPY --from=build /app/packages/web/public ./packages/web/public COPY --from=build /app/packages/web/package.json ./packages/web/ COPY --from=build /app/packages/shared/dist ./packages/shared/dist COPY --from=build /app/packages/shared/package.json ./packages/shared/ COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/package.json ./ EXPOSE 3000 WORKDIR /app/packages/web CMD ["node", "/app/node_modules/.bin/next", "start", "-p", "3000"] # ---- Development ---- FROM dependencies AS development COPY packages/shared/ ./packages/shared/ COPY packages/web/ ./packages/web/ COPY tsconfig.base.json ./ RUN npm run build --workspace=packages/shared EXPOSE 3000 WORKDIR /app/packages/web CMD ["node", "/app/node_modules/.bin/next", "dev", "--port", "3000", "--turbopack"]