在 monorepo 中对 NestJs dockerized 应用程序进行 VS 代码调试

Bož*_*vić 2 debugging node.js visual-studio-code nestjs

一段时间以来,我一直在尝试弄清楚如何设置节点调试进程的附件,这些进程在我的环境中从单一存储库设置中的多个正在运行的 Nestjs 应用程序中公开。(用VS代码)

https://github.com/bozvul993/nest-testing-mono-repo-debug

理想情况下,我希望在代码更改时重新启动调试会话[如果可能的话],但更重要的是工作。

我已经为我的示例项目提供了一个存储库。运行/docker文件夹 内的应用程序docker-compose -f dev.yml up 这将显示 monorepo 中的三个应用程序。所有向主机公开其默认节点调试端口的应用程序...

我用来尝试此操作的 vs code 启动配置包括:

            "type": "node",
            "request": "attach",
            "name": "Debug App1",
            "address": "0.0.0.0",
            "port": 9231,
            "localRoot": "${workspaceFolder}/mono-repo",
            "remoteRoot": "/app/mono-repo",
            "trace": true,
            "restart": true,
            "sourceMaps": true,
            "skipFiles": [
                "<node_internals>/**"
            ]
        }


With Web-storm this was easier to achieve somehow..
Run Code Online (Sandbox Code Playgroud)

Mat*_*ias 14

我发现这个https://code.visualstudio.com/docs/containers/debug-node非常有用。

长话短说,我的 docker-compose 文件看起来像

version: '3.7'
services:
  api:
    container_name: api
    build:
      context: .
      target: development
    volumes:
      - '.:/app'
      - './node_modules:/app/node_modules'
    command: yarn start:debug
    ports:
      - ${API_PORT}:${API_PORT}
      - 9229:9229
    networks:
      - network
  mongo_db:
    ...
    ...
    ...
networks: 
  network:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

从文件中选取的文件development部分看起来像Dockerdocker-compose.yaml

FROM node:16-alpine as development
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV}
WORKDIR /app

COPY package.json .
COPY yarn.lock .

RUN yarn

COPY . .

RUN yarn build

FROM node:16-alpine as production
...
Run Code Online (Sandbox Code Playgroud)

而我的launch.json样子

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug: api",
      "type": "node",
      "request": "attach",
      "restart": true,
      "port": 9229,
      "address": "0.0.0.0",
      "localRoot": "${workspaceFolder}",
      "remoteRoot": "/app",
      "protocol": "inspector",
      "skipFiles": ["<node_internals>/**"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

最后,但并非最不重要的一点是,start:debug的各个部分package.json必须稍作改变。

我的看起来像

"start:debug": "nest start --debug 0.0.0.0:9229 --watch",
Run Code Online (Sandbox Code Playgroud)

在我的机器上工作:) 首先使用 启动所有容器docker compose up -d,然后从 VS code 启动调试过程。

VS 代码 1.57.1​​、Docker 版本 20.10.7、MacOS