ค้นหาเว็บไซต์

การดีบัก - ดีบักและรีสตาร์ทเมื่อมีการเปลี่ยนแปลง TypeScript ใน VSCode


ฉันต้องการดีบักและตั้งเบรกพอยต์ในไฟล์ TypeScript และรีสตาร์ทตัวดีบักเมื่อมีการเปลี่ยนแปลง (เหมือน nodemon คอยเฝ้าดูการเปลี่ยนแปลง) ด้วยการตั้งค่าตัวดีบักของ VSCode

จนถึงตอนนี้ฉันสามารถรันผ่าน VSCode และรีสตาร์ทเมื่อมีการเปลี่ยนแปลงโดยไม่ต้องดีบั๊ก

นี่คือ launch.json ของฉัน:

{
    "name": "Launch Typescript Server Debugger",
    "request": "launch",
    "type": "node",
    "cwd": "${workspaceRoot}",
    "protocol": "inspector",
    "stopOnEntry": false,
    "program": "${workspaceRoot}/node_modules/nodemon/bin/nodemon",
    "args": [
      "--watch",
      "src/**/*.ts",
      "--ignore",
      "src/**/*.spec.ts",
      "--exec",
      "${workspaceRoot}/node_modules/.bin/ts-node",
      "--inspect",
      "src/app.ts"
    ],
    "restart": true,        
    "env": { "NODE_ENV": "dev"}
  }      

มีไอเดียอะไรไหม?

คำตอบ #1

สงสัยว่าทำไมถึงมีความคิดเห็น WTF มากมายขนาดนี้กับคำถามที่ธรรมชาติเหมือนปกตินี้ นี่คือวิธีที่ฉันทำมัน:

เราต้องการ nodemon เพื่อรีสตาร์ทแอปของเราหลังจากมีการเปลี่ยนแปลง, เราต้องการ ts-node/register เพื่อรัน TypeScript ของเรา, และเราต้องการตั้งค่าสคริปต์ตัวเรียกใช้งานของ vscode เพื่อเชื่อมต่อดีบักเกอร์ใหม่หลังจากแอปถูกคอมไพล์อีกครั้ง ดังนั้นติดตั้ง nodemon, ts-node และเพิ่มสคริปต์นี้ใน package.json:

"watch:debug": "nodemon --inspect=5858 -e ts,tsx --exec node -r ts-node/register ./src/index.ts"

จากนั้นใน launch.json ให้เพิ่มการกำหนดค่า:

{
  "name": "Attach to Process",
  "type": "node",
  "request": "attach",
  "restart": true,
  "port": 5858,
  "outFiles": [],
  "sourceMaps": true
},

นั่นแหละ ตอนนี้ฉันสามารถเริ่มแอปของฉันด้วย yarn watch:debug และแนบดีบักเกอร์ได้แล้ว หากคุณยังพบปัญหา ให้ตรวจสอบที่รีโป Github ของฉันที่นี่

คำตอบ #2

คุณควรลองดู ts-node-dev ซึ่งในความเห็นของผมมันเร็วกกว่า nodemon ในแง่ของการเฝ้าดูการคอมไพล์ เพราะมัน แบ่งปัน กระบวนการคอมไพล์ Typescript ระหว่างการรีสตาร์ท ด้านล่างเป็นตัวอย่างการตั้งค่า launch.json ของ vscode เพื่อให้คุณสามารถตั้ง break point (debug) รวมถึงรีโหลดเมื่อมีการเปลี่ยนแปลงได้

{
  "version": "1.0.0",
  "configurations": [
    {
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "name": "Local Server",
      "restart": true,
      "request": "launch",
      "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/ts-node-dev",
      "skipFiles": [ "<node_internals>/**" ],
      "type": "node",
      "runtimeArgs": [ "--respawn" ],
      "args": [ "${workspaceFolder}/src/script/local.server.ts" ]
    }
  ]
}

ตอนนี้คุณสามารถกด F5 หรือใช้แผงดีบักเพื่อเริ่มการดีบัก/รีโหลดแบบสดได้

ฉันห่อหุ้มไลบรารีขนาดเล็กสำหรับสิ่งนี้ไว้ให้ ถ้าคุณเกิดพัฒนาโดยใช้ aws lambda

https://github.com/vcfvct/ts-lambda-local-dev

บทความที่เกี่ยวข้อง