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 шт):

Автор решения: lena

Для конфигурации 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 утилиту

→ Ссылка
Автор решения: iwanttobelive

Решение:

  1. В конфигурациях отладки Phpstorm создаёте профиль "Attach to Node.js/Chrome", там укажите параметр Attach to в значении Chrome or Node.js

  2. В package.json в секции scripts запишите команду

    "произвольное имя": "node --inspect-brk <путь до файла> [параметры]"

  3. Запустите команду из консоли npm run <произвольное имя>

  4. Запустите настроенную в первом шаге сессию отладки

Всё, скрипт остановится там, где вы указали точки остановки.

Что не сработает:

  1. Указание в шебанг

    #!/usr/bin/env -S node --inspect

Дело в том, что на Windows это строчка игнорируется, но используется npm при вызове команды npm link, без которой вызов пакета по короткой команде не сработает. npm link создает команды (читая строку шебанг и параметры из нее) в специальной директории, но там вызов скрипта ссылается на пакет в папке node_modeles.

Получается ваш код запускается из node_modeles, где точек остановки нет и профиль Attach to Node.js/Chrome эту папку по умолчанию игнорирует. Я пробовал добавить точки остановки и добавить папку в прослушиваемые, но с первого раза не сработало, а больше времени я тратить не хочу.

В деталях могу напутать, если кто поправит буду признателен.

→ Ссылка