Могу ли я запустить / отладить Heroku Node.js приложение локально с помощью VSCode?

#node.js #heroku #visual-studio-code

#node.js #heroku #visual-studio-code

Вопрос:


TL; DR

В Microsoft VSCode версии v1.6.1, как:

  1. Правильно установить исполняемый файл во время выполнения?
  2. Правильно передавать аргументы Heroku?
  3. Запустите Heroku Node.js приложение?
  4. Отлаживать 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 . Для этого каждый раз требуется подключение вручную, и если у вас работает другое автоматическое вложение, это может быть лучше, но это все еще работоспособное решение.