Как отлаживать приложения Node.js, запускающие Typescript внутри docker-compose, с помощью VSCode?

Цель

Моя цель — иметь возможность отлаживать несколько сервисов Node.js, работающих в docker-compose, с помощью VSCode. Но есть некоторые проблемы:

  1. ts-node-dev не содержит документации по отладке VSCode. Но поскольку это просто оболочка вокруг ts-node (который имеет встроенную поддержку отладки VSCode) это должно быть возможно с чем-то вроде описанного здесь. Или мне нужно использовать ts-node, когда я хочу отладить?

  2. Как отлаживать код, работающий внутри контейнера Docker? Для этой цели я мог бы сделать что-то подобное, как описано здесь. Но они компилируют TYpescript в Javascript вручную, чего я не хочу делать.

  3. Как координировать несколько услуг? Поскольку у меня есть несколько служб, нужно ли мне выбирать, какую из них я хочу отладить, или можно запустить отладчик для всех служб одновременно?

Проект

Я сделал небольшой пример проекта со следующей структурой. В docker-compose работают две службы (шлюз и привет).

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 для запуска служб, которые автоматически перезапускают серверы при обнаружении изменения в коде, но я бы хотел использовать что-то еще, если это необходимо.


person Florian Ludewig    schedule 27.04.2020    source источник