在monorestore中对NestJs的码头化应用程序进行VS代码调试



一段时间以来,我一直在尝试如何设置一个附件,以连接在我的环境中从mono repo设置中的多个运行的nestjs应用程序暴露的节点调试进程。(带VS代码(

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

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

我为我的示例项目提供了一个存储库。运行/docker文件夹中的应用程序docker-compose -f dev.yml up这就引出了monorestore中的三个应用程序。所有暴露在主机上的应用程序的默认节点调试端口。。。

我的vs代码启动配置,我曾经尝试过,我包括:

"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..

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

长话短说,我的docker撰写文件看起来像

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

其中从docker-compose.yaml文件中提取的Docker文件的development部分看起来像

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
...

我的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>/**"]
}
]
}

最后,但同样重要的是,package.jsonstart:debug部分必须稍作改变。

我的看起来像

"start:debug": "nest start --debug 0.0.0.0:9229 --watch",

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

VS代码1.57.1,Docker版本20.10.7,MacOS

最新更新