From 01f64ff1ecad1ed8c06460198df013409d9d3426 Mon Sep 17 00:00:00 2001 From: yushen Date: Tue, 10 Feb 2026 17:31:51 +0800 Subject: [PATCH] fix(gateway): include workspace packages in Docker build Copy @multica/sdk and @multica/store workspace packages into both builder and production stages. Build them with tsc in the builder stage, then patch their package.json exports to point from ./src/*.ts to ./dist/*.js for Node.js runtime compatibility. Co-Authored-By: Claude Opus 4.6 --- src/gateway/Dockerfile | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/gateway/Dockerfile b/src/gateway/Dockerfile index 3af4b805..244dccf8 100644 --- a/src/gateway/Dockerfile +++ b/src/gateway/Dockerfile @@ -8,10 +8,17 @@ WORKDIR /app # Copy package files (pnpm-workspace.yaml needed for catalog resolution) COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +COPY packages/sdk/package.json ./packages/sdk/ +COPY packages/store/package.json ./packages/store/ # Install all dependencies (including devDependencies for build) RUN pnpm install --frozen-lockfile +# Copy workspace packages and build them +COPY packages/sdk/ ./packages/sdk/ +COPY packages/store/ ./packages/store/ +RUN pnpm --filter @multica/sdk build && cd packages/store && ../../node_modules/.bin/tsc + # Copy source code COPY tsconfig.json ./ COPY src ./src @@ -29,10 +36,29 @@ WORKDIR /app # Copy package files (pnpm-workspace.yaml needed for catalog resolution) COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +COPY packages/sdk/package.json ./packages/sdk/ +COPY packages/store/package.json ./packages/store/ # Install production dependencies only RUN pnpm install --frozen-lockfile --prod +# Copy built workspace packages and patch exports to point to compiled JS +COPY --from=builder /app/packages/sdk/dist ./packages/sdk/dist +COPY --from=builder /app/packages/store/dist ./packages/store/dist +RUN node -e " \ + const fs = require('fs'); \ + ['packages/sdk/package.json', 'packages/store/package.json'].forEach(p => { \ + const pkg = JSON.parse(fs.readFileSync(p, 'utf8')); \ + if (pkg.exports) { \ + for (const [key, val] of Object.entries(pkg.exports)) { \ + if (typeof val === 'string') { \ + pkg.exports[key] = val.replace('./src/', './dist/').replace('.ts', '.js'); \ + } \ + } \ + } \ + fs.writeFileSync(p, JSON.stringify(pkg, null, 2)); \ + });" + # Copy built files from builder stage COPY --from=builder /app/dist ./dist