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

Relaterte artikler