如何在docker-compose中运行TypeScript的Node.js应用程序,并使用VSCode进行调试?

4

目标

我的目标是能够通过使用VSCode调试工具,调试在docker-compose中运行的多个Node.js服务。但是这其中存在一些挑战:

  1. ts-node-dev没有提供VSCode调试的文档。不过因为它只是ts-node的一个包装器(而且ts-node原生支持VSCode调试),像这里所描述的那样,应该可以实现调试。或者当我想要调试时,我是否必须使用ts-node

  2. 如何调试运行在Docker容器内的代码?为此,我可以做类似于这里描述的事情。但他们需要手动将TypeScript编译成JavaScript,而我不想这样做。

  3. 如何协调多个服务?因为我有多个服务,我是否必须选择要调试的服务,还是可以同时启动所有服务的调试器?

项目

我创建了一个小的样例项目,其结构如下。在docker-compose中运行两个服务(gateway和hello)。

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

运行docker-compose up --build之后:

这是我用于在开发模式下启动项目的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来运行服务。它会在代码发生更改时自动重启服务器,但如果需要的话,我也愿意使用其他工具。

你有没有尝试过VSCode远程容器扩展 https://code.visualstudio.com/docs/remote/containers ?这只是一个想法。 - V.i.K.i
@V.i.K.i 看起来很有趣。但是我一开始看到的问题是它只能在 一个 容器内运行。而我有很多容器。不过我会仔细研究它 :) - Florian Ludewig
当然。试试看吧。 - V.i.K.i
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接