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:

  1. 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-node når jeg vil feilsøke?

  2. 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.

  3. 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

Relaterte artikler