VSCode ile docker-compose içinde Typescript çalışan Node.js uygulamaları nasıl hata ayıklanır?


Hedef

Amacım, VSCode'un yardımıyla docker-compose içinde çalışan birden fazla Node.js servisini debug edebilmek. Ama bununla ilgili bazı zorluklar var:

  1. ts-node-dev'in VSCode hata ayıklama için belgesi yok. Ama sadece ts-node'un (VSCode hata ayıklamayı doğal olarak destekleyen) bir sarmalayıcısı olduğu için, burada açıklanan gibi bir şeyle bu mümkün olmalı. Yoksa hata ayıklamak istediğimde ts-node mu kullanmam gerekiyor?

  2. Docker konteyneri içinde çalışan kod nasıl hata ayıklanır? Bu amaçla burada açıklanan benzeri bir şey yapabilirim. Ama onlar Typescript'i manuel olarak Javascript'e derliyorlar, bunu yapmak istemiyorum.

  3. Birden fazla hizmeti nasıl koordine edebilirim? Çünkü birden fazla hizmetim var, hangi hizmeti hata ayıklamak istediğimi seçmem mi gerekiyor yoksa tüm hizmetler için hata ayıklayıcıyı bir kerede başlatmak mümkün mü?

Proje

Aşağıdaki yapıya sahip küçük bir örnek proje yaptım. Docker-compose içinde çalışan iki servis var (gateway ve hello).

package.json
tsconfig.json
docker-compose.yaml
services
  hello
    index.ts
  gateway
    index.ts

docker-compose up --build komutunu çalıştırdıktan sonra:

  • http://localhost:3000 - geçit doğrudan yanıt verir
  • http://localhost:3000/hello - ağ geçidi hello servisinden yanıt gönderir

İşte projeyi geliştirme modunda başlatmak için kullandığım docker-compose.yaml dosyası.

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

Kodda bir değişiklik tespit edildiğinde sunucuları otomatik olarak yeniden başlatan ts-node-dev kullanarak servisleri çalıştırdığımı unutmayın, ancak gerekirse başka bir şey kullanmaya istekli olurum.

Cevap #1

Bunun nasıl çalıştığını anlatan bir video yaptım.

https://odysee.com/@flolu:7/docker-typescript-debug:3?r=HFBL1PfaSVqKsaYbQDRH3GZZp78ch6CR

Ve işte kaynak kodu: https://github.com/flolu/docker-typescript-debug

İlgili makaleler