node.js - ניפוי באגים של אפליקציית Nest באמצעות מיפוי נתיבים על ידי TS


אני מנסה לנפות שגיאות באפליקציית Typescript-Node (על ידי NestJS) אבל כשכללתי את מיפוי הנתיבים על ידי Typescript ->

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

זה כבר לא עובד, זה זורק את השגיאה הזו:

קובץ קונפיגורציית דיבוג נראה כך:

והקובץ TSCONFIG נראה כך:

רק להזכיר שהאפליקציה עובדת בסדר, הבדיקות עוברות בסדר והכל עובד כפי שציפיתי, חוץ מזה שכאשר אני לוחץ על הפעל כדי לדבג את האפליקציה.

פתרון חלופי הוא להחליף את הנתיבים הללו בנתיב הרגיל היחסי שיובא, אבל זה אומר לוותר על תכונת מיפוי הנתיבים שהביאה TS וזוהי ההזדמנות האחרונה שלי.

תשובה #1

מצאתי את הפתרון לזה. אני עומד לפרט את השלבים במקרה שזה יעזור למישהו אחר.

כאשר מוסיפים מיפוי נתיבים לפרויקט שלך, יש לך את ההזדמנות להשתמש בנתיבים קצרים ומוחלטים למודולים, שלזה יש כמה יתרונות/חסרונות אבל באופן כללי אני חושב שזה מצוין בעבודה עם מודולים.

בעיה עשויה להופיע כאשר בודקים, מתחקרים או מריצים את האפליקציה בצורה שונה מהאופן שבו אתם עובדים במצב פיתוח.

אז באמצעות jest, אתה צריך להוסיף:

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

לאחר מכן לצורך ניפוי שגיאות, הייתי צריך לבצע את השלבים הבאים:

1) עדכן את launch.json ב-vscode:

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

2) עדכן את הסקריפטים ב-package.json כדי להוסיף:

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

3) התקן את tsconfig-paths - (npm install --save-dev tsconfig-paths)

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

4) צור/עדכן קובץ 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"
}

שים לב לשורה הזאת

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

ההבדל עם nodemon.json הוא:

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

תשובה #2

לגבי ניפוי שגיאות, אני תוהה מדוע הכנסת את nodemon במקרה של שימוש ב-typescript וכבר התקנת ts-node. הפתרון שלך יכול להיות מפושט באמצעות ספריית tsconfig-paths בלבד. לאחר ההתקנה, ניתן לעדכן את launch.json ב-vscode כך:

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

הנה הקישור לנקודה המסוימת הזו בתיעוד החבילה.

נ.ב: מסגרת Nest מספקת את הסקריפט start:debug ישירות מהמארז, שגם ניתן לצרף בקלות לתצורת launch.json.