Отладка и перезапуск на изменениях машинопись vscode

Я хочу отладить и установить точки останова в файлах машинописи и перезапустить отладчик, когда будут внесены изменения (например, для наблюдения за изменениями в 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"}
  }      

Есть идеи?

5 ответов

Интересно, почему так много комментариев WTF по этому совершенно естественному вопросу. Вот как я это сделал:

Нам нужен nodemon, чтобы перезапустить наше приложение при изменениях, нам нужен ts-node / register для запуска нашего typecrypt, и нам нужно настроить скрипт запуска 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
},

Вот и все, теперь я могу запустить свое приложение с помощью функции отслеживания пряжи: отладки и присоединения отладчика. Если вы все еще сталкиваетесь с проблемами, проверьте мой репозиторий Github здесь.

вам обязательно стоит проверить ts-node-dev, который IMHO быстрее, чем nodemonс точки зрения наблюдения за компиляцией, потому что он разделяет процесс компиляции Typescript между перезапусками. Ниже приведен пример vscode launch.json config, чтобы вы могли установить точку останова (отладка), а также перезагрузить при изменении.

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

Этот мне подходит. Я использую Typescript и Node вместе.

Это мой launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "program": "${workspaceFolder}/src/index.ts",
            "preLaunchTask": {
                "type": "typescript",
                "tsconfig": "tsconfig.json",
                "option": "watch",
                "problemMatcher": [
                    "$tsc-watch"
                ],
                "group": "build"
            },
            "outFiles": [
                "${workspaceFolder}/lib/**/*.js"
            ],
            "runtimeExecutable": "nodemon",
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen"
        }
    ]
}

Без использования ts-node, вы можете перезапустить на изменения с этим конфигом

task.json

Эта задача наблюдать за файлами и компилировать их при сохранении

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "typescript",
            "type": "typescript",
            "tsconfig": "tsconfig.json",
            "problemMatcher": ["$tsc-watch"],
            "option": "watch"
        }
    ]
}

затем в launch.json,

перезагрузка nodemon при изменении (в моем случае встроенные файлы находятся в каталоге dist)

       {
            "type": "node",
            "request": "launch",
            "runtimeExecutable": "nodemon",
            "args": ["--watch", "dist"],
            "name": "Debug TypeScript in Node.js",
            "preLaunchTask": "typescript",
            "program": "${workspaceFolder}/start.js",
            "cwd": "${workspaceFolder}",
            "protocol": "inspector",
            "outFiles": ["${workspaceFolder}/dist/**/*.js"],
            "restart": true
        }

Совершенно неясно, что именно вы спрашиваете, но это может быть полезно. Попробуйте добавить эти конфигурации в свой

{
 "name": "Current TS File",
 "type": "node",
 "request": "launch",
 "args": ["${relativeFile}"],
 "runtimeArgs": ["--nolazy", "-r", "ts-node/register"],
 "sourceMaps": true,
 "cwd": "${workspaceRoot}",
 "protocol": "inspector",
}

Эта конфигурация:

  • Устанавливает задачу узла, которая запускает текущий открытый файл в VS Code (переменная ${lativeFile} содержит текущий открытый файл)
  • Передается в аргументе --nolazy для узла, который сообщает v8, что нужно заранее скомпилировать код, чтобы точки останова работали правильно
  • Передает в -r ts-node / register для узла, который гарантирует, что ts-node загружается до того, как он попытается выполнить ваш код
  • Устанавливает рабочий каталог в корневой каталог проекта - ${workspaceRoot}
  • Устанавливает протокол отладки узла в режим инспектора V8.

Я сомневаюсь, что вам не хватает

 "runtimeArgs": ["--nolazy"]

В настройках запускаешь.

Другие вопросы по тегам