目标
我的目标是能够通过使用VSCode调试工具,调试在docker-compose中运行的多个Node.js服务。但是这其中存在一些挑战:
ts-node-dev没有提供VSCode调试的文档。不过因为它只是ts-node的一个包装器(而且ts-node原生支持VSCode调试),像这里所描述的那样,应该可以实现调试。或者当我想要调试时,我是否必须使用
ts-node
?如何调试运行在Docker容器内的代码?为此,我可以做类似于这里描述的事情。但他们需要手动将TypeScript编译成JavaScript,而我不想这样做。
如何协调多个服务?因为我有多个服务,我是否必须选择要调试的服务,还是可以同时启动所有服务的调试器?
项目
我创建了一个小的样例项目,其结构如下。在docker-compose中运行两个服务(gateway和hello)。
package.json
tsconfig.json
docker-compose.yaml
services
hello
index.ts
gateway
index.ts
运行docker-compose up --build
之后:
- http://localhost:3000 - 网关直接响应
- http://localhost:3000/hello - 网关从hello服务发送响应
这是我用于在开发模式下启动项目的docker-compose.yaml文件。
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
请注意,我使用
ts-node-dev
来运行服务。它会在代码发生更改时自动重启服务器,但如果需要的话,我也愿意使用其他工具。