отладка в коде Visual Studio с babel-узлом
Я:
- VS код v1.3.1
- узел В6.3.1
- Вавилон-узел v6.11.4
- Windows 10
Я не могу получить остановку в точке останова со следующим файлом запуска. Отладчик запускается и подключается к порту, но когда я запускаю приложения с точкой останова, он не останавливается в точке останова и проходит прямо. Кто-нибудь, кто заставил это работать, пожалуйста, сообщите.
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/src/app.js",
"stopOnEntry": false,
"args": [],
"cwd": "${workspaceRoot}",
"preLaunchTask": null,
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/babel-node.cmd",
"runtimeArgs": [
"--nolazy"
],
"env": {
"NODE_ENV": "development"
},
"externalConsole": false,
"sourceMaps": false,
"outDir": null
},
{
"name": "Attach",
"type": "node",
"request": "attach",
"port": 5858,
"address": "localhost",
"restart": false,
"sourceMaps": false,
"outDir": null,
"localRoot": "${workspaceRoot}",
"remoteRoot": null
},
{
"name": "Attach to Process",
"type": "node",
"request": "attach",
"processId": "${command.PickProcess}",
"port": 5858,
"sourceMaps": false,
"outDir": null
}
]
}
3 ответов
я смог заставить его работать после следующих шагов:
.в JSONубедитесь, что у вас есть скрипт для сборки с sourcemaps поколения.
"scripts": {
"build": "babel src -d dist --source-maps"
}
задач.в JSON
убедитесь, что у вас есть задание, что позволит VS Code строить с помощью npm
сценарий.
{
"version": "0.1.0",
"command": "npm",
"isShellCommand": true,
"showOutput": "always",
"suppressTaskName": true,
"tasks": [
{
"taskName": "build",
"args": [ "run", "build" ],
"isBuildCommand": true
}
]
}
запуск.в JSON
настроить скрипт построить до запуска С a preLaunchTask
, начните program
от точки входа источника, но с outDir
указывая на р-н и sourceMaps
включено.
{
"name": "Launch",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/src/server.js",
"stopOnEntry": false,
"args": [],
"cwd": "${workspaceRoot}",
"preLaunchTask": "build",
"runtimeExecutable": null,
"runtimeArgs": [ "--nolazy" ],
"env": {
"NODE_ENV": "development"
},
"externalConsole": false,
"sourceMaps": true,
"outDir": "${workspaceRoot}/dist"
}
теперь, каждый раз, когда вы нажимаете Ф5 на babel
транспиляция выполняется до начала процесса узла, но при синхронизации всех исходных карт. С его помощью я смог использовать точки останова и все другие вещи отладчика.
нет необходимости транспилировать с babel-node
при использовании babel-node
вы не должны transpile первый код.
базовая настройка (исходные карты - всегда)
Примечание sourceMaps
и retainLines
опции .babelrc
:
{
"presets": [
"env"
],
"sourceMap": "inline",
"retainLines": true
}
а потом в launch.json
:
{
"type": "node",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/index.js",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/babel-node",
"runtimeArgs": ["--nolazy"]
}
предварительная настройка (sourcemaps - только отладка)
вы можете настроить выше только для генерации исходных карт / retainLines в debug режим:
{
"presets": ["env", "flow"],
"env": {
"debug": {
"sourceMap": "inline",
"retainLines": true
}
}
}
и:
{
"type": "node",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/index.js",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/babel-node",
"runtimeArgs": ["--nolazy"],
"env": {
"BABEL_ENV": "debug"
},
}
начиная с версии 1.9 VS Code автоматически пытается использовать исходные карты по умолчанию, но вы должны указать outFiles
если транспилированные файлы находятся не в той же папке, что и исходные файлы.
в качестве примера, вот соответствующие файлы. В этом случае babel трансплицируется из до .
Примечание: записи package.json
и .vscode/tasks.json
требуются только если вы хотите, чтобы VS-код транспилировал файлы до отладка.
.vscode / запуск.в JSON
Ctrl+ Shift+P, >Debug: Open launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceRoot}/lib/index.js",
"cwd": "${workspaceRoot}",
"preLaunchTask": "build",
"outFiles": [
"${workspaceRoot}/lib/**.js"
]
}
]
}
Примечание: только указать preLaunchTask
если вы создали build
задачи package.json
и .vscode/tasks.json
.
пакета.в JSON
Ctrl+P, package.json
{
"scripts": {
"build": "babel src -d lib -s"
},
"devDependencies": {
"babel-cli": "^6.23.0",
"babel-preset-env": "^1.1.10"
}
}
Примечание: вы можете использовать другую версию из babel-cli
и различные пресеты babel.
.vscode / задачи.в JSON
Ctrl+ Shift+P, >Tasks: Configure Task Runner
{
"version": "0.1.0",
"command": "npm",
"isShellCommand": true,
"showOutput": "always",
"suppressTaskName": true,
"tasks": [
{
"taskName": "build",
"args": ["run", "build"],
"isBuildCommand": true
}
]
}
официальная документация VS Code
Карты Источник
Узел.отладчик JS кода VS поддерживает исходные карты JavaScript, которые помогают отладке транспилированных языков, например TypeScript или minified/uglified JavaScript. С исходными картами это возможно чтобы выполнить один шаг или установить точки останова в исходном источнике. Если исходная карта не существует для исходного источника или если исходная карта нарушена и не может успешно сопоставляться между исходным кодом и сгенерированным JavaScript, точки останова отображаются как непроверенные (серые полые круги).
исходные карты могут быть сгенерированы с двумя видами встраивания:
- встроенные исходные карты: созданный файл JavaScript содержит исходную карту в виде URI данных в конце (вместо ссылки на исходную карту через URI файла).
- встроенный источник: исходная карта содержит исходный источник (вместо ссылки на источник через путь).
VS Code поддерживает оба встроенные исходные карты и встроенный источник.
функция карты источника управляется значение по умолчанию true
начиная с VS Code 1.9.0. Этот означает, что отладка узла всегда пытается использовать исходные карты (если они могут найти), и, как следствие, вы даже можете указать исходный файл (например, приложение.ТС) с .
Если вам нужно отключить исходные карты по какой-либо причине, вы можете установить до false
.
если сгенерированные (транспилированные) файлы JavaScript находятся не рядом с их источником, а в отдельном каталоге, вы должны помочь отладчику VS Code найти их, установив