Отладка и перезапуск на изменениях машинопись 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"]
В настройках запускаешь.