From a6ffba6b37f1ecf4f424d0750cbd1d682e57510e Mon Sep 17 00:00:00 2001 From: Groom Book CEO Date: Wed, 18 Mar 2026 01:32:42 +0000 Subject: [PATCH] Fix Docker build: compile TypeScript packages before runtime stage The API Docker image was copying raw .ts source files for @groombook/db and @groombook/types into the runtime stage, but tsx (the TS loader) is a devDependency stripped by --prod install. Node.js cannot load .ts files natively, causing ERR_UNKNOWN_FILE_EXTENSION at startup. - Add build scripts to db and types packages - Add outDir to types tsconfig - Update package.json main fields to point to compiled dist/ - Build packages in dependency order in Dockerfile - Copy only dist output to runtime stage Co-Authored-By: Paperclip --- apps/api/Dockerfile | 10 +++++++--- packages/db/package.json | 3 ++- packages/types/package.json | 3 ++- packages/types/tsconfig.json | 3 ++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 4fbcb3f..97526cf 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -14,7 +14,9 @@ RUN pnpm install --frozen-lockfile FROM deps AS builder COPY packages/ packages/ COPY apps/api/ apps/api/ -RUN pnpm --filter @groombook/api build +RUN pnpm --filter @groombook/types build && \ + pnpm --filter @groombook/db build && \ + pnpm --filter @groombook/api build # Runtime FROM node:20-alpine AS runner @@ -29,8 +31,10 @@ COPY packages/types/package.json packages/types/ RUN pnpm install --frozen-lockfile --prod COPY --from=builder /app/apps/api/dist apps/api/dist -COPY --from=builder /app/packages/db packages/db -COPY --from=builder /app/packages/types packages/types +COPY --from=builder /app/packages/db/dist packages/db/dist +COPY --from=builder /app/packages/db/package.json packages/db/package.json +COPY --from=builder /app/packages/types/dist packages/types/dist +COPY --from=builder /app/packages/types/package.json packages/types/package.json EXPOSE 3000 CMD ["node", "apps/api/dist/index.js"] diff --git a/packages/db/package.json b/packages/db/package.json index f446d58..ff1747a 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -2,9 +2,10 @@ "name": "@groombook/db", "version": "0.0.1", "private": true, - "main": "./src/index.ts", + "main": "./dist/index.js", "types": "./src/index.ts", "scripts": { + "build": "tsc", "generate": "drizzle-kit generate", "migrate": "drizzle-kit migrate", "seed": "tsx src/seed.ts", diff --git a/packages/types/package.json b/packages/types/package.json index 3cb32fc..e1cb6c0 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -2,9 +2,10 @@ "name": "@groombook/types", "version": "0.0.1", "private": true, - "main": "./src/index.ts", + "main": "./dist/index.js", "types": "./src/index.ts", "scripts": { + "build": "tsc", "typecheck": "tsc --noEmit" }, "devDependencies": { diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index 4df90ff..d7595d0 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -5,7 +5,8 @@ "moduleResolution": "NodeNext", "strict": true, "noUncheckedIndexedAccess": true, - "skipLibCheck": true + "skipLibCheck": true, + "outDir": "./dist" }, "include": ["src"] } -- 2.52.0