Próbuję debugować typescript node.js dockerized app wewnątrz vscode.

Mam następującą strukturę:

|api
|- src
|- dist

Mój DockerFile jest taki:

FROM node:latest

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json yarn.lock ./
RUN yarn

# Bundle app source
COPY . .

# Build typescript source
RUN npx tsc

EXPOSE 8080
EXPOSE 9229
CMD [ "yarn", "start" ]

Mój główny plik server.ts:

import { Request, Response } from 'express';
import express = require('express');
import os = require('os');

const app = express();
const port = 8080;

app.get('/', (req: Request, res: Response) => {
  res.send(`<h3>It's ${os.hostname()} - (API) - ${port}</h3>`);
});
app.listen(port, () => {
  console.log(`[API] Server Started on Port ${port}`);
});

Mój tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "commonjs",
    "lib": ["es6"],
    "allowJs": true,
    "outDir": "dist",
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    },
    "declaration": true,
    "sourceMap": true
  },
  "include": ["src/**/*.ts"]
}

Polecenie yarn start do mojego {X1}} Exectute `Nodemon, który jest tak skonfigurowany:

{
  "restartable": "rs",
  "watch": ["src"],
  "ext": ".ts,.js",
  "ignore": [".git", "node_modules/**/node_modules"],
  "exec": "npx tsc && node ./dist/server.js",
  "signal": "SIGINT"
}

Oto konfiguracja usługi w moim {x0}}

version: "3.8"
services:
  api:
    build: api/
    environment:
      - NODE_ENV=development
      - NODE_OPTIONS=--inspect=0.0.0.0:9229
    deploy:
      replicas: 1
      restart_policy:
        max_attempts: 3
        condition: on-failure
      update_config:
        parallelism: 1
        delay: 1s
    volumes:
      - ./api:/usr/src/app
      - node_modules-api:/usr/src/app/node_modules
    ports:
      - 9229:9229

I wreszcie mój launch.json jest następujący:

{
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to API",
      "port": 9229,
      "protocol": "inspector",
      "cwd": "${workspaceFolder}/api/",
      "localRoot": "${workspaceFolder}/api/",
      "remoteRoot": "/usr/src/app/",
      "outFiles": ["${workspaceRoot}/api/dist/**/*.js"],
      "sourceMaps": true,
      "trace": "verbose",
      "stopOnEntry": true
    }
  ]
}

Moja usługa zaczyna się poprawnie, a debugger My {X0}}.

Debugger listening on ws://0.0.0.0:9229/41993b9a-4af4-4106-b49f-0fe601e6571e

For help, see: https://nodejs.org/en/docs/inspector

yarn run v1.22.4

$ node src/wrapper.js

Starting inspector on 0.0.0.0:9229 failed: address already in use

[nodemon] 2.0.4


[nodemon] to restart at any time, enter `rs`

[nodemon] watching path(s): src/**/*

[nodemon] watching extensions: ts,js


[nodemon] starting `npx tsc && node ./dist/server.js`


[API] Server Started on Port 8080


Debugger attached.

Ale kiedy próbuję umieścić breakpoint tutaj jest następujący wynik:

enter image description here

Czytałem dużo o tym problemie, ale żaden z rozdziałów delivred dla mnie.

Upuściłem także plik dziennika Vscode: https://mega.nz/file/kfztykok# czxcvjntgzjkzhh_xj6svbnbvfmylmwOWH6-OAQMFRW

Jeśli potrzebujesz dodatkowych informacji, powiedz mi.

Z góry dziękuję.

0
Antony Rizzitelli 1 sierpień 2020, 00:32

1 odpowiedź

Najlepsza odpowiedź

Okazuje się, że przy użyciu NODE_OPTIONS=--inspect jako Env Var każdy proces próbował uruchomić inspektora. Ale ponieważ zaczynałem moją aplikację z przędzą, proces przędzy dostał inspektor, a proces mojego węzła nie mógł wiązać się z tym portu.

Więc Vscode debuguje niewłaściwy proces, dlaczego Punkt BreakPoint nie został ustawiony prawidłowo.

0
Antony Rizzitelli 19 sierpień 2020, 12:53