Phpstorm: отладка js запускаемого из командной строки
Я пишу исполняемую node.js утилиту для командной строки. Вызов происходит командой
gendiff file1.json file2.json
где gendiff это сама команда, далее идут параметры.
package.json содержит секцию
"bin": {
"gendiff": "bin/gendiff.js"
},
В gendiff.js указан шенбанг
#!/usr/bin/env node
Мой вопрос в следующем. Как я могу отлаживать работу запускаемых из командной строки скриптов на javascript в Phpstorm?
Существующие инструкции рассказывают о том, как можно отлаживать js с помощью плагинов для браузера или конфигурации node.js в IDE, но там, опять же, требуется браузер.
Есть инструкции, которые описывают отладку скриптов через инспектор nodejs, но мне нужны точки остановки в IDE и прочий функционал отладки Phpstorm.
Ответы (2 шт):
Для конфигурации node.js никакого браузера не требуется... И это - самый правильный способ отлаживать node.js приложения в Phpstorm.
Инструкции по отладке запускаемых из командной строки приложений есть в документации - https://www.jetbrains.com/help/webstorm/2021.3/running-and-debugging-node-js.html#ws_node_debug_from_run_tw. Но для начала вам нужно запустить вашу утилиту под отладчиком, т.е. с опцией --inspect-brk. Не знаю, как именно лучше это сделать, если вы не запускаете node.js интерпретатор в явном виде, а вместо этого используете js файл с шенбангом. Тем не менее, запуск с отладочными опциями - единственный способ отладить node.js утилиту
Решение:
В конфигурациях отладки Phpstorm создаёте профиль "Attach to Node.js/Chrome", там укажите параметр Attach to в значении Chrome or Node.js
В package.json в секции scripts запишите команду
"произвольное имя": "node --inspect-brk <путь до файла> [параметры]"
Запустите команду из консоли npm run <произвольное имя>
Запустите настроенную в первом шаге сессию отладки
Всё, скрипт остановится там, где вы указали точки остановки.
Что не сработает:
Указание в шебанг
#!/usr/bin/env -S node --inspect
Дело в том, что на Windows это строчка игнорируется, но используется npm при вызове команды npm link, без которой вызов пакета по короткой команде не сработает. npm link создает команды (читая строку шебанг и параметры из нее) в специальной директории, но там вызов скрипта ссылается на пакет в папке node_modeles.
Получается ваш код запускается из node_modeles, где точек остановки нет и профиль Attach to Node.js/Chrome эту папку по умолчанию игнорирует. Я пробовал добавить точки остановки и добавить папку в прослушиваемые, но с первого раза не сработало, а больше времени я тратить не хочу.
В деталях могу напутать, если кто поправит буду признателен.