FROM arm64v8/node:22 AS base ENV SHARP_IGNORE_GLOBAL_CLI_BINARIES=1 ENV VIPS_DISABLE_DEPS=1 ENV PNPM_SCRIPT_RUNNER_ALLOW_BUILD=true RUN corepack enable WORKDIR /app FROM base AS builder COPY package.json pnpm-lock.yaml ./ RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile --dangerously-allow-all-builds COPY . . # ^ copy source code RUN --mount=type=cache,target=/app/.vinxi pnpm run build # ^ produces .output (build artifact) and .vinxi (build cache) FROM base AS production_builder RUN apt-get update && apt-get install -y jq COPY --from=builder /app/package.json ./ RUN jq 'del(.devDependencies)' package.json > package.prod.json COPY --from=builder /app/pnpm-lock.yaml ./ RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile --dangerously-allow-all-builds # Prod image FROM arm64v8/node:22-alpine ENV SHARP_IGNORE_GLOBAL_CLI_BINARIES=1 ENV VIPS_DISABLE_DEPS=1 ENV PNPM_SCRIPT_RUNNER_ALLOW_BUILD=true RUN corepack enable WORKDIR /app COPY --from=production_builder /app/package.prod.json ./package.json COPY --from=production_builder /app/pnpm-lock.yaml ./pnpm-lock.yaml RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile COPY --from=builder /app/.output ./.output EXPOSE 3000 CMD ["npm", "run", "start"]