node.js - Ladenie aplikácie Nest pomocou mapovania ciest v TS


Snažím sa debuggovať aplikáciu typescript-node (cez nestjs), ale keď som zahrnul mapovanie ciest podľa Typescript ->

https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping

už to nefunguje, vyhadzuje túto chybu:

Konfiguračný súbor pre ladenie vyzerá takto:

A TSCONFIG súbor vyzerá takto:

Len aby som spomenul, že aplikácia funguje dobre, testy prechádzajú v poriadku a všetko funguje podľa očakávania, okrem prípadu, keď stlačím play, aby som ladil aplikáciu.

Obchádzka je nahradiť tie cesty relatívnou normálnou cestou, ktorá sa má importovať, ale to znamená zrieknuť sa funkcie mapovania ciest, ktorú prináša TS, a to je moja posledná šanca.

Odpoveď č. 1

Našiel som riešenie tohto problému. Podrobne popíšem kroky, aby to mohlo niekomu inému pomôcť.

Pri pridávaní mapovania ciest do vášho projektu máte možnosť používať kratšie a absolútne cesty k modulom, čo má niektoré výhody/nevýhody, ale všeobecne si myslím, že je to skvelé pri práci s modulmi.

Problém môže nastať pri testovaní, ladení alebo spúšťaní aplikácie inak ako pri práci v režime vývoja.

Takže pri používaní jest je potrebné pridať:

"jest": {
    "moduleFileExtensions": [ ... ],
    "moduleNameMapper": {
      "@db/(.*)": "<rootDir>/core/database/$1",
      "@exceptions/(.*)": "<rootDir>/core/exceptions/$1",
      "@permissions/(.*)": "<rootDir>/permissions/$1",
      "@roles/(.*)": "<rootDir>/roles/$1",
      "@users/(.*)": "<rootDir>/users/$1",
      "@videos/(.*)": "<rootDir>/videos/$1"
    },
    "rootDir": "src",
    ...

Potom som pre ladenie potreboval vykonať nasledujúce kroky:

1) Aktualizujte launch.json vo VSCode:

        {
            "type": "node",
            "request": "launch",
            "name": "Nest Debug",
            "runtimeExecutable": "npm",
            "runtimeArgs": [
                "run-script",
                "debug"
            ],
            "port": 9229
        },

2) Aktualizujte skripty v súbore package.json, aby ste pridali:

"debug": "nodemon --config nodemon-debug.json",

3) Nainštalujte tsconfig-paths - (npm install --save-dev tsconfig-paths)

https://github.com/dividab/tsconfig-paths

4) Vytvoriť/Aktualizovať súbor nodemon-debug.json:

{
  "watch": [
    "src"
  ],
  "ext": "ts",
  "ignore": [
    "src/**/*.spec.ts"
  ],
  "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
}

Všímaj si tento riadok

node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts

Rozdiel s nodemon.json je:

  • Nodemon.json: "exec": "ts-node -r tsconfig-paths/register src/main.ts"
  • Nodemon-debug.json: "exec": "ts-node -r tsconfig-paths/register -r tsconfig-paths/register src/main.ts"

Odpoveď č. 2

Čo sa týka ladenia, zaujímalo by ma, prečo ste zaviedli nodemon v prípade použitia typescript a pri tom už máte nainštalovaný ts-node. Vaše riešenie je možné zjednodušiť použitím iba knižnice tsconfig-paths. Po nainštalovaní môže byť súbor launch.json vo vscode aktualizovaný nasledovne:

{
  "configurations": [{
    "type": "node",
    "request": "launch",
    "name": "Debug Nest App",
    "args": ["src/main.ts"],
    "runtimeArgs": ["-r", "ts-node/register", "-r", "tsconfig-paths/register"],
    "autoAttachChildProcesses": true
  }]
}

Tu je odkaz na konkrétny bod v dokumentácii balíka.

PS: Framework Nest poskytuje skript start:debug priamo v základnej výbave, ktorý sa dá jednoducho pripojiť k konfigurácii launch.json.

Súvisiace články