node.js - Esbuild kjører ikke på docker compose
Jeg er ny på å bygge med esbuild og får det ikke til å fungere med et skript som kan overvåke og bygge filene mine på nytt. Jeg må også få dette til å fungere i Docker.
I min package.json har jeg følgende:
"start": "node dist/server.js",
"start:watch": "nodemon ./dist/server.js",
"build": "esbuild server.ts --bundle --platform=node --outfile=dist/server.js",
"build:watch": "yarn build --watch",
"dev": "yarn build && run-p start:watch build:watch"
Og i dockerfilen min:
FROM node:16
WORKDIR /app
COPY package.json .
COPY yarn.lock .
RUN yarn
COPY . .
RUN yarn build
CMD ["yarn", "dev"]
Jeg bruker en docker-compose-fil, som for denne tjenesten ser slik ut:
actions:
build:
context: ./actions
depends_on:
- "my-other-app"
volumes:
- ./actions:/app
- actions_node_modules:/app/node_modules
environment:
NODE_ENV: ${NODE_ENV}
PORT: 5000
Ved et blikk på loggene når Docker er oppe, ser det ut til å fungere.
yarn run v1.22.18
yarn build && run-p start:watch build:watch
esbuild server.ts --bundle --platform=node --outfile=dist/server.js
dist/server.js 1.2mb ⚠️
nodemon ./dist/server.js
yarn build --watch
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./dist/server.js`
esbuild server.ts --bundle --platform=node --outfile=dist/server.js --watch
Server listening at http://localhost:5000
Imidlertid blir endringer i mine .ts-filer ikke overvåket, og hvis jeg gjør en endring i min package.json, starter serveren på nytt, men ingenting bygges på nytt.
Kan noen gi råd om hvor jeg gjør feil? Hvis jeg kjører yarn dev-skriptet utenfor Docker, fungerer det perfekt. Det er noe med Docker-delen som går galt.
Svar #1
Jeg klarte å finne en løsning. Å legge til stdin_open: true i docker-compose.yml. Grunnen til at dette må legges til er fordi Docker lukker stdin, og esbuild trenger at det forblir åpent for å fungere.
actions:
build:
context: ./actions
depends_on:
- "my-other-app"
volumes:
- ./actions:/app
- actions_node_modules:/app/node_modules
environment:
NODE_ENV: ${NODE_ENV}
PORT: 5000
stdin_open: true
