Как отладить Gruntfile с точками останова с помощью node-inspector, Windows 7?
-
20-12-2019 - |
Вопрос
Итак, я потратил последние пару дней, безуспешно пытаясь заставить это работать.Большинство решений, которые я нашел, похоже, работают "нормально" для отладки узловых приложений.Но мне не очень повезло с отладкой grunt stand в одиночку.Я хотел бы иметь возможность устанавливать точки останова в моем gruntfile и выполнять пошаговое выполнение кода либо с помощью браузера, либо с помощью IDE.
Я попробовал следующее:
- Отладка с использованием IntelliJ IDE с использованием консоли Grunt (Процесс завершен с кодом выхода 6)
- Отладка с помощью Nodeeclipse (Такой способ работает нормально, но не попадает в точки останова, установленные в eclipse, что не очень интуитивно понятно)
- Отладка с использованием node-inspector (Это тоже вроде как работает.Я могу проделать несколько шагов, используя клавиши F11 и F10 в chrome.Но в конце концов он просто выходит из строя.Использование F8 для перехода к точке останова никогда не работает.)
СООБЩЕНИЕ ОБ ОШИБКЕ ПРИ ИСПОЛЬЗОВАНИИ NODE-INSPECTOR
Так что в настоящее время node-inspector чувствует, что это приблизило меня к тому, чего я хочу.Чтобы попасть сюда, я сделал следующее:
Из моего каталога grunt я запустил следующие команды:
grunt node-inspector
node --debug-brk Gruntfile.js
А потом оттуда я отправился в localhost:8080/debug?port=5858
для отладки моего Gruntfile.js.Но, как я упоминал выше, как только я нажимаю клавишу F8, чтобы перейти к точке останова, происходит сбой с вышеуказанной ошибкой.Имел ли кто-нибудь какой-либо успех, используя этот метод, чтобы попытаться отладить Gruntfile?До сих пор, несмотря на мои поисковые усилия, я не нашел очень хорошо документированного способа сделать это.Так что, надеюсь, это будет полезная информация для будущих пользователей.Также я использую Windows 7 кстати.Заранее спасибо.
ОБНОВЛЕНИЕ:
Я попробовал следующее, предложенное @dylants, но пока безуспешно.
Найден файл grunt.cmd на компьютере с Windows, расположенный в
C:\Users\khollenbeck\AppData\Roaming\npm
.Открылсяgrunt.cmd
файл и обнаружил следующее....Это привело меня к
C:\Users\khollenbeck\AppData\Roaming\npm\node_modules\grunt-cli\bin
который содержал файл с именемgrunt
.И оттуда в верхней части файла.Я изменил этот код#!/usr/bin/env node
к#!/usr/bin/env node --debug-brk
После выполнения этой команды
node-inspector C:\path\to\gruntfile grunt
Я получил следующее.Node Inspector v0.7.3 Visit http://localhost:8080/debug?port=5858 to start debugging
Затем я запустил программу
grunt
команда от grunt реж.(оставляя сервер запущенным в исходной командной строке)
Отсюда я ожидал, что Gruntfile.js появится в исходном коде chrome dev tools.Я также ожидал, что оттуда смогу устанавливать точки останова.Этого не произошло.Вместо этого он просто прошел весь путь через Gruntfile, не прерываясь и не загружаясь в браузере.
Редактировать:
Ах, я вижу, что я сделал не так.По какой-то причине я выполнил node --debug-brk без добавления пути C:\Users\khollenbeck\AppData oaming pm ode_modules\grunt-cli\bin\grunt.Теперь это работает, большое спасибо.Я приношу извинения за то, что так долго тянул с этим.Но, надеюсь, это будет полезно другим пользователям Windows в будущем.
Решение
Этого можно достичь, запустив node-inspector
и начиная grunt
в режиме отладки.Как только это будет сделано, вы сможете пройти через свой Gruntfile.js
в Chrome, как обычно.
запустить узел-инспектор
Если у вас еще нет node-inspector
, установите его с помощью npm install -g node-inspector
.Затем запустите его в одном терминале / командной строке:
$ node-inspector
Node Inspector v0.7.3
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.
запустите grunt в режиме отладки
Затем найдите свой grunt
скрипт.Это файл JavaScript, который выполняется при запуске программы grunt
команда из командной строки.Если вы установили grunt глобально (используя npm install -g grunt-cli
) тогда это, скорее всего, будет в /usr/bin
или /usr/local/bin
для компьютеров *nix или Mac.Для компьютеров с ОС Windows, grunt.cmd
файл указывает на то, где находится grunt
скрипт найден.Скорее всего, grunt
скрипт находится в C:\Users\<username>\AppData\Roaming\npm\node_modules\grunt-cli\bin
.
Как только вы найдете местоположение скрипта, используйте node --debug-brk
чтобы выполнить этот скрипт, запустите, таким образом, grunt в режиме отладки, остановившись на первой строке кода в файле.Так, например, представьте, что скрипт grunt находится по адресу /usr/bin/grunt
:
$ node --debug-brk /usr/bin/grunt
debugger listening on port 5858
Вы поймете, что добились успеха, когда увидите debugger listening on port 5858
в качестве выходных данных, что означает, что скрипт grunt приостановил выполнение и ожидает выполнения с помощью отладчика.
отладка с помощью Chrome
Теперь откройте Chrome и наведите его на http://127.0.0.1:8080/debug?port=5858
.В Chrome откройте и добавьте точки останова в свой Gruntfile.js
, и пройдите через это, как вы обычно делали бы.
Другие советы
Чтобы запустить node-inspector, вам больше не следует передавать флаг --debug или --debug-brk.Вы можете запустить его непосредственно с помощью node-inspector
и путь к файлу, точно так же, как вы обычно запускаете скрипт, используя node
команда.Это должно автоматически открыть webkit inspector в chrome и приостановить выполнение на первой строке.Отсюда вы можете вставить свои точки останова и выполнять отладку в обычном режиме.
Как упоминалось выше, для отладки задачи grunt вам нужно будет найти свой исполняемый файл Grunt с помощью $ which grunt
в Mac, не уверен насчет Windows.Затем вам нужно было бы скопировать этот путь и использовать его в качестве первого аргумента, передаваемого node-debug, причем вторым аргументом является задача (и вы также могли бы включить цель grunt, если необходимо).Так, например, это может выглядеть следующим образом:
node-debug /usr/local/bin/grunt concat:dev
и отсюда вы могли бы отладить любой файл, который будет выполнен для задачи concat.Это включает в себя зависимости grunt-concat, которые были бы в его локальных node_modules.Поскольку мне показалось раздражающим копировать и вставлять путь к моему исполняемому файлу, я создал самый простой Node cli, чтобы абстрагироваться от этого https://github.com/dtothefp/node-build-debug.Если вы установите это глобально (и, конечно, установите node-inspector глобально), вы можете:
$ build-debug grunt concat:dev
В более новых версиях Node (я думаю, начиная с 6.3) есть встроенный отладчик / инспектор:
https://nodejs.org/en/docs/inspector/
Просто запустите свое приложение Grunt следующим образом (в Windows):
node --inspect %APPDATA%\npm\node_modules\grunt-cli\bin\grunt
Если вы установите расширение Chrome Менеджер инспектора узлов, инструменты разработки откроются автоматически.
В противном случае вы можете открыть chrome://inspect
и подключитесь к сеансу отладки вручную.