# ---- Build stage: needs devDependencies (tsc, ts-node-dev, etc.) ---- FROM node:20-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ # Install ALL deps including devDependencies so tsc is available RUN npm ci COPY . . RUN npm run build # ---- Production stage: only runtime deps + compiled output ---- FROM node:20-alpine AS production WORKDIR /app ENV NODE_ENV=production COPY package.json package-lock.json ./ # Only production deps — devDependencies are not needed at runtime RUN npm ci --omit=dev && npm cache clean --force # Copy compiled JS from build stage COPY --from=build /app/dist ./dist EXPOSE 3333 CMD ["node", "dist/index.js"]