# Multi-stage build to compile the project from source and serve as a static site # Stage 1: Build FROM node:slim as builder WORKDIR /app # Install dependencies (copy package.json first for layer caching) COPY package.json ./ RUN npm install # Copy the rest of the project COPY . . # Build from source: transpile and bundle RUN ./node_modules/.bin/babel src --out-dir dist RUN ./node_modules/.bin/webpack # Stage 2: Runtime FROM node:slim WORKDIR /app # Copy build artifacts and static assets from the builder COPY --from=builder /app/dist /app/dist COPY --from=builder /app/index.html /app/index.html COPY --from=builder /app/index.css /app/index.css COPY --from=builder /app/assets /app/assets COPY --from=builder /app/examples /app/examples # Expose a lightweight static server (http-server) RUN npm install -g http-server EXPOSE 8080 # Command to serve this directory statically on port 8080 CMD ["http-server", ".", "-p", "8080"]
node_modules /dist npm-debug.log *.log .git .gitignore .env coverage .idea .vscode assets/*.map examples/*.map
- Exact error message and exit code: ERROR: failed to build: failed to solve: process "/bin/sh -c ./node_modules/.bin/babel src --out-dir dist" did not complete successfully: exit code: 1 - Failing command/step: [builder 6/7] RUN ./node_modules/.bin/babel src --out-dir dist - Missing packages or files mentioned (root cause): You have mistakenly installed the `babel` package, which is a no-op in Babel 6. Babel's CLI commands have been moved from the `babel` package to the `babel-cli` package. npm uninstall babel npm install --save-dev babel-cli See http://babeljs.io/docs/usage/cli/ for setup instructions. - Version mismatch / info: Babel 6: CLI commands moved from babel to babel-cli; having the old babel package installed causes the CLI to be a no-op.
# Multi-stage build to compile the project from source and serve as a static site # Stage 1: Build FROM node:slim as builder WORKDIR /app # Install dependencies (copy package.json first for layer caching) COPY package.json ./ RUN npm install # Ensure Babel CLI is available for non-watch builds RUN npm install --save-dev babel-cli # Copy the rest of the project COPY . . # Build from source: transpile and bundle RUN ./node_modules/.bin/babel src --out-dir dist RUN ./node_modules/.bin/webpack # Stage 2: Runtime FROM node:slim WORKDIR /app # Copy build artifacts and static assets from the builder COPY --from=builder /app/dist /app/dist COPY --from=builder /app/index.html /app/index.html COPY --from=builder /app/index.css /app/index.css COPY --from=builder /app/assets /app/assets COPY --from=builder /app/examples /app/examples # Expose a lightweight static server (http-server) RUN npm install -g http-server EXPOSE 8080 # Command to serve this directory statically on port 8080 CMD ["http-server", ".", "-p", "8080"]
Concerns: COPY of index.html/index.css may fail if these static assets are not present in the project root, babel-cli is installed as a dev dependency in the build stage; consider pruning build-time deps or using a more streamlined build to reduce image size Smoke [PASS]: test -f /app/index.html Smoke [PASS]: test -d /app/dist && echo dist_present || echo dist_missing Smoke [PASS]: command -v http-server >/dev/null 2>&1