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:
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-nodemu kullanmam gerekiyor?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.
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