Hvordan feilsøke Node.js-applikasjoner som kjører TypeScript inne i docker-compose med VSCode?
Mål
Målet mitt er å kunne feilsøke flere Node.js-tjenester som kjører i docker-compose med hjelp av VSCode. Men det er noen utfordringer involvert:
ts-node-dev har ingen dokumentasjon for VSCode-feilsøking. Men siden det bare er en wrapper rundt ts-node (som har innebygd støtte for VSCode-feilsøking), bør dette være mulig med noe som beskrevet her. Eller må jeg bruke
ts-nodenår jeg vil feilsøke?Hvordan feilsøke koden som kjører inne i en Docker-container? Til det formålet kan jeg gjøre noe lignende som beskrevet her. Men de kompilerer Typescript til Javascript manuelt, noe jeg ikke ønsker å gjøre.
Hvordan koordinere flere tjenester? Fordi jeg har flere tjenester, må jeg velge hvilken jeg vil feilsøke, eller er det mulig å starte feilsøkeren for alle tjenestene samtidig?
Prosjektet
Jeg har laget et lite prøveprosjekt med følgende struktur. Det er to tjenester (gateway og hello) som kjører i docker-compose.
package.json
tsconfig.json
docker-compose.yaml
services
hello
index.ts
gateway
index.ts
Etter å ha kjørt docker-compose up --build:
- http://localhost:3000 - gateway svarer direkte
- http://localhost:3000/hello - gateway sender svar fra hello-tjenesten
Her er docker-compose.yaml-filen jeg bruker for å starte prosjektet i utviklingsmodus.
version: "3"
services:
gateway:
image: node:lts-alpine
working_dir: /
volumes:
- ./package.json:/package.json
- ./tsconfig.json:/tsconfig.json
- ./services/gateway:/services/gateway
- ./node_modules:/node_modules
command: yarn run ts-node-dev services/gateway
ports:
- 3000:3000
hello:
image: node:lts-alpine
working_dir: /
volumes:
- ./package.json:/package.json
- ./tsconfig.json:/tsconfig.json
- ./services/hello:/services/hello
- ./node_modules:/node_modules
command: yarn run ts-node-dev services/hello
Merk at jeg bruker ts-node-dev for å kjøre tjenestene, som automatisk starter serverne på nytt når en endring i koden oppdages, men jeg vil være villig til å bruke noe annet hvis nødvendig.
Svar #1
Jeg har laget en video som forklarer hvordan man får dette til å fungere.
https://odysee.com/@flolu:7/docker-typescript-debug:3?r=HFBL1PfaSVqKsaYbQDRH3GZZp78ch6CR
Og dette er kildekoden: https://github.com/flolu/docker-typescript-debug