Как отладить Node.js приложений, выполняющих Typescript внутри docker -составить с VSCode? - PullRequest
1 голос
/ 27 апреля 2020

Цель

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

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

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

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

Проект

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

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

...