#node.js #heroku #visual-studio-code
#node.js #heroku #visual-studio-code
Вопрос:
TL; DR
В Microsoft VSCode версии v1.6.1, как:
- Правильно установить исполняемый файл во время выполнения?
- Правильно передавать аргументы Heroku?
- Запустите Heroku Node.js приложение?
- Отлаживать Heroku Node.js приложение?
Подробные сведения
Я создал Heroku Node.js приложение, которое запускается с помощью команды CLI:
heroku local web
и успешно запускается на порту 5000.
Я пытаюсь отладить его с помощью кода Microsoft Visual Studio, используя следующую launch.json
конфигурацию:
{
"name": "Launch",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/app.js",
"stopOnEntry": false,
"args": [],
"cwd": "${workspaceRoot}",
"preLaunchTask": null,
"runtimeExecutable": "/usr/local/bin/heroku",
"runtimeArgs": [
"local web",
],
"env": {
"NODE_ENV": "development"
},
"console": "internalConsole",
"sourceMaps": false,
"outFiles": []
}
Но VSCode автоматически передает --debug-brk
аргумент heroku, вызывая ошибку:
/usr/local/bin/heroku --debug-brk=23080 'local web' app.js
! `--debug-brk=23080` is not a heroku command.
! See `heroku help` for a list of available commands.
VSCode также не находит команду heroku без ее полного пути (похоже, что она не загружает PATH
переменную среды).
Есть идеи о том, как настроить редактор?
Ответ №1:
Для меня работает следующее решение:
1) В вашем procfile добавьте параметр —debug к процессу узла
web: node --debug server.js
По умолчанию отладчик прослушивает порт 5858
2) После запуска процесса узла откройте VSCode и добавьте следующую конфигурацию в свой файл launch.json
{
"type": "node",
"request": "attach",
"name": "Attach to Process",
"port": 5858
}
3) Наконец, нажмите кнопку воспроизведения в VSCode с опцией «Прикрепить к процессу», и он должен отладить ваш процесс.
Комментарии:
1. Выдаю сообщение об ошибке: connect ECONNREFUSED 127.0.0.1:5858. Уверен, что я не изменил никаких значений по умолчанию… Я запускаю свой процесс узла на порту 9000, но это не процесс отладчика.
2. Ясное и краткое объяснение, которое отсортировало его для меня! Просто чтобы добавить небольшое разъяснение для наивных пользователей node, таких как я: добавление параметра —inspect в Procfile означает, что когда приложение Node запускает дополнительный процесс Node, запущенный на другом порту, к которому может быть подключен отладчик, запускается. Мое веб-приложение работает на порту 8080, а дополнительный процесс отладки был 9229.
Ответ №2:
У меня сработало следующее решение. В моем package.json «scripts» я добавил:
"debug": "node --inspect-brk server.js"
Затем в launch.json я добавил запись в envFile в конфигурацию по умолчанию «Запуск через NPM», которая теперь выглядит следующим образом:
{
"type": "node",
"request": "launch",
"name": "Launch via NPM",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"debug"
],
"port": 9229,
"envFile": "${workspaceFolder}/.env"
}
Вышеупомянутое решение позволяет отладчику VSCode запускать мой сервер с помощью npm-скрипта, и мой сервер запускается с переменными env, установленными в моем файле .gitignore’d .env, точно так же, как в «обычном» Heroku node.js рабочий процесс.
Ответ №3:
Я боролся с этим, поскольку по какой-то причине предложенное решение у меня не сработало. Однако было альтернативное решение, поэтому я решил поделиться.
Из параметров отладки по умолчанию в VS Code выберите
Attach by Process ID
Когда вы запускаете отладчик с этой конфигурацией, в нем должен быть список доступных процессов для подключения, и один из них должен быть просто be server.js . Для этого каждый раз требуется подключение вручную, и если у вас работает другое автоматическое вложение, это может быть лучше, но это все еще работоспособное решение.