Использование инспектора узлов с задачами Grunt

Использовал ли кто-нибудь node-spector с Grunt для отладки приложений? Если нет, можете ли вы порекомендовать инструмент отладки для приложений на основе Grunt?

Я работаю с nodejs для серверного приложения, и у меня есть Grunt для использования отдельных задач (это связано с тем, что пользователи могут выполнять задачи по отдельности).


person JuanO    schedule 23.06.2012    source источник
comment
console.log — ваш друг. Я бы хотел получить доступ к инспектору узлов, но я думаю, что инструменты отладки не являются частью V8. Насколько я понимаю, инструменты отладки являются самостоятельным веб-приложением. Поправьте меня, если я ошибаюсь, потому что я хотел бы сделать то, что вы пытаетесь сделать.   -  person iancrowther    schedule 05.09.2012
comment
Да, система ведения журнала (я имею в виду console.log или другой механизм ведения журнала) всегда будет нашим другом, но мне нужен другой, более отлаживаемый способ. К настоящему времени я обнаружил некоторые отсутствующие требования к моему проекту с помощью grunt, поэтому я уже удалил их и использую nodejs как собственный, поэтому теперь я могу отлаживать с помощью node-spector. Я знаю, это не решение, но оно работает. Я думаю, что в будущем я снова добавлю grunt с добавленным инспектором узлов и другими инструментами/функциями. И последнее, но не менее важное: хрюканье, это круто! Я использую его в других проектах и ​​действительно крут!   -  person JuanO    schedule 06.09.2012
comment
Только начал играться с Grunt, тоже интересует этот вопрос...   -  person Dmitry Pashkevich    schedule 13.09.2012
comment
@iancrowther, инструменты, которые использует веб-инспектор, находятся в V8. Существует проект под названием node-inspector, который взаимодействует с node --debug, предоставляя отладочную информацию браузеру, который подключается. Это здорово, потому что вы можете подключить Chrome к процессу инспектора узлов и использовать все инструменты веб-инспектора для отладки своего приложения. github.com/dannycoates/node-инспекция   -  person David Souther    schedule 05.10.2012


Ответы (7)


Чтобы запустить grunt в режиме отладки, вам нужно явно передать скрипт grunt на узел:

node-debug $(which grunt) task

и поместите строку debugger; в свою задачу. node-inspector откроет браузер с инструментами отладки.

Изменить 28 февраля 2014 г.

node-inspector добавил команду node-debug, которая запускает узел в состоянии --debug и открывает браузер на странице node-inspector, останавливаясь при достижении первой строки debugger или установке точки останова.

Редактировать 30 января 2015 г.

В Windows все немного сложнее. Инструкции см. в ответе @e.gluhotorenko.

person David Souther    schedule 05.10.2012
comment
Отлично. Он также работает с другими глобально установленными бинами npm. - person pllee; 30.01.2014
comment
Задача node debug $(what grunt) использует отладчик nodejs по умолчанию - person Tomas Romero; 25.02.2014
comment
У меня с этим проблемы. Не могли бы вы уточнить, что такое $(which grunt)? Я хочу отладить только Gruntfile.js? А вместо task поставить (на примере serve) grunt serve или просто serve? Я пробовал node-debug Gruntfile.js serve и много других вещей, но я просто не могу заставить это работать. Инспектор узлов открывается, и он прерывается на первой строке, но я не могу перейти к задаче serve, даже если я поставлю строку debugger; в качестве первой строки функции. - person Brett; 10.03.2014
comment
@brett, у тебя Windows или OSX/Linux? В Unix $(который grunt) заменяется полным путем к скрипту grunt-cli grunt.js. Это скрипт, который фактически запускает Grunt. Если вы работаете в Windows, посмотрите на stackoverflow.com/a/13443026/240358 (ответ ниже) для возможное местонахождение скрипта grunt-cli. Это заменяет grunt в вашей команде - в вашем примере замените task на serve - person David Souther; 10.03.2014
comment
Спасибо @DavidSouther, вы хотите добавить к своему ответу часть, относящуюся к Windows? Я действительно должен просто перейти на линукс... - person Brett; 11.03.2014

решение для Windows

Бегать

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

из cmd в каталоге с вашим Gruntfile.js. Не забудьте поставить debugger; строку в нужных местах.

person Eugene Gluhotorenko    schedule 18.11.2012
comment
Начиная с grunt 0.4 точка входа grunt является частью пакета grunt-cli: node --debug-brk [..]\node_modules\grunt-cli\bin\grunt - person mistaecko; 20.03.2013
comment
Большое спасибо за инструкцию для Windows. В powershell вы можете использовать тильду, чтобы сделать это немного менее хрупким node --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname - person George Mauer; 20.01.2014
comment
Чувак, я только что потратил 30 минут на то, чтобы понять это, а затем обновить свой ответ! Я должен был просто прокрутить вниз! - person David Souther; 30.01.2015
comment
Не забудьте открыть другую консоль и запустить node-inspector - person valter.santos.matos; 05.08.2015
comment
@ valter.santos.matos на самом деле теперь вы должны использовать узел --inspect, упомянутый ниже - person Jackie; 28.06.2017

Для отладки нам нужно изменить файл grunt в bin. На моей машине grunt установлен глобально, поэтому я зашел в /usr/local/lib/node_modules/grunt/bin, открыл файл и изменил:

#!/usr/bin/env node

To

#!/usr/bin/env node --debug-brk

--debug-brk сломается на первой строке запущенного javascript.

Одного этого недостаточно, поскольку вы не сможете найти js-файл своей задачи grunt в раскрывающемся списке в инспекторе узлов, поэтому вам нужно изменить файл, который вы хотите отладить, добавив debugger; где вы хотите, чтобы точка останова произошла. Теперь вы можете нажать «Продолжить» после первого разрыва, и вы прервете свою debugger; строку.

Довольно kludgy, но это единственный способ, который я нашел до сих пор.

person user1577390    schedule 26.09.2012
comment
Это невероятно глупо, так как зависит от разнообразия поведения в /usr/bin/env и недокументированной магии между # и \n в строке shebang. - person David Souther; 05.10.2012
comment
Это не работает для меня. Grunt по-прежнему работает без режима отладки. - person Eugene Gluhotorenko; 17.11.2012
comment
@DavidSouther Shebangs не является незадокументированной магией. Это стандартизированное поведение POSIX. - person Miles Rout; 04.09.2017

Недавно я создал grunt-node-spector, чтобы легко сконфигурировать его с остальной частью вашего рабочего процесса grunt, проверьте его: https://github.com/ChrisWren/grunt-node-spector

Вот раздел файла Grunt, который иллюстрирует, как вы можете отлаживать задачу grunt, используя grunt-node-spector, grunt-concurrent и grunt-shell: https://github.com/CabinJS/Cabin/blob/master/Gruntfile.js#L44-L77

person ChrisWren    schedule 27.09.2013
comment
Вы думаете, запустить что-то вроде node --debug-brk $(which grunt) node-inspector build test? Я люблю это. - person David Souther; 25.11.2013
comment
В значительной степени, за исключением того, что я использую concurrent, потому что node-inspector не выйдет и не позволит работать build и test, поскольку он работает вечно. Я добавил ссылку на фрагмент, где я его настроил. - person ChrisWren; 27.11.2013
comment
Хм. Если подумать... в моем рабочем процессе я только запускаю node-inspector &, оставляю его в фоновом режиме и завершаю работу. Есть какие-нибудь ваши мысли по этому поводу? - person David Souther; 27.11.2013
comment
Не уверен, почему, но это, кажется, не работает для меня. Я запускаю команду grunt node-inspector, а затем перехожу по URL-адресу localhost и не вижу исходных файлов. Просто пустые инструменты отладчика. - person Kris Hollenbeck; 30.05.2014
comment
Мне удалось получить источник, выполнив две отдельные команды. grunt node-inspector и node --debug-brk Gruntfile.js из моего каталога grunt. Однако, когда я устанавливаю точку останова в файле grunt, он просто вылетает с ошибкой подключения. - person Kris Hollenbeck; 02.06.2014

Я выполнил задачу по запуску своего приложения и запуску узла-инспектора. Это намного лучше, чем текущее предложение, вам просто нужно добавить эту задачу в gruntfile:

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });
person olivier dufour    schedule 14.09.2013
comment
Автор grunt-node-inspector прав. Это решение работает только в средах posix, в то время как его проще настроить инспектор узлов, а с одновременным выполнением он работает на posix и окнах. - person rainabba; 14.12.2013

Отличные ответы здесь. В 2017 году теперь можно

node --inspect --debug-brk $(which grunt) taskName

Который печатает что-то вроде.

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471

Откройте этот URL-адрес в Chrome, и все готово!

Я использую Node 7.3.0 и работаю на Mac. Возможно, вам придется следовать некоторым советам из других сообщений, чтобы запустить его в Windows.

person RoccoB    schedule 22.03.2017

Обновление 2019 года

  • Если вы хотите запустить задачу grunt в режиме отладки и прервать первую строку:

    node --inspect-brk $(which grunt) taskName

  • Если вы хотите запустить задачу grunt в режиме отладки на определенном порту:

    node --inspect-brk=8080 $(which grunt) taskName

  • если вы хотите прикрепить VSCODE к процессу узла, выполняющему сеанс отладки grunt, используйте следующую конфигурацию в vscode:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    
    {
      "type": "node",
      "request": "attach",
      "name": "Attach by port IP 5656",
      "port": 8080
    }
  ]
}

person ZEE    schedule 07.02.2019