Використання вузла-інспектора із завданнями Grunt


101

Чи використовує хто-небудь інспектор вузлів з Grunt для налагодження програми? Якщо ні, чи можете ви порекомендувати інструмент для налагодження програм на основі Grunt?

Я працюю з nodejs для додатка на сервері, і у мене є Grunt використовувати окремі завдання (це тому, що користувачі можуть виконувати завдання окремо).


console.log - ваш друг .. Я б хотів отримати доступ до інспектора вузлів, але я думаю, що інструменти для налагодження не є частиною V8. Як я розумію, інструменти для налагодження самі по собі є веб-додатком. Виправте мене, якщо я тут помиляюся, тому що я хотів би зробити те, що ви намагаєтесь.
iancrowther

Так, система ведення журналів (я маю на увазі console.log або інший механізм ведення журналу) завжди буде нашим другом, але те, що мені потрібно, - це інший і більш налагоджуваний спосіб. На даний момент я виявив деякі недоліки до свого проекту з грунтом, тому я вже видалив, і я використовую nodejs як його власний, тому я можу налагоджувати за допомогою node-inspector зараз. Я знаю, це не рішення, але воно працює. Думаю, в майбутньому я знову додаду грух із додаванням вузла-інспектора та інших інструментів / функцій. І останнє, але не менш важливе, бурмотіть, що це приголомшливо! Я використовую це в інших проектах і справді рок!
JuanO

Щойно почав грати з Грунтом, також зацікавився цим питанням ...
Дмитро Пашкевич

@iancrowther, інструменти, які використовує веб-інспектор, є у V8. Існує проект, який називається, node-inspectorякий спілкується node --debug, надаючи інформацію про налагодження до браузера, який підключається. Це приголомшливо, адже потім ви можете підключити Chrome до процесу перевірки вузлів та використовувати всі інструменти веб-інспектора для налагодження програми. github.com/dannycoates/node-inspector
Девід

Відповіді:


135

Щоб запустити 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 для вказівки.


1
Це чудово. Він також працює на інших глобально встановлених бункерах npm.
заклик

1
node debug $ (that grunt) завдання використовує налагоджувач nodejs за замовчуванням
Tomas Romero

3
У мене є проблеми з цим. Не могли б ви уточнити, що $(which grunt)таке? Це просто Gruntfile.js, який я хочу налагодити? А для taskчого я ставлю (використовуючи serveяк приклад) grunt serveчи просто serve? Я спробував node-debug Gruntfile.js serveі багато інших речей, але я просто не можу це зробити. Вузол-інспектор відкривається, і він переривається на першому рядку, але я не можу перерватися в serveзадачі, навіть якщо я ставлю debugger;рядок як перший рядок функції.
Бретт

2
@brett, ти в Windows або OSX / Linux? На unix $ (який grunt) замінюється повним шляхом до grunt.jsсценарію grunt-cli . Це сценарій, який насправді працює Grunt. Якщо у вас є Windows, подивіться на stackoverflow.com/a/13443026/240358 (відповідь нижче цього) для можливого розташування сценарію grunt-cli. Це займає місце gruntу вашому командуванні - у вашому прикладі замініть taskнаserve
Девід Саутер

Дякуємо @DavidSouther, ти хочеш додати відповідь, що стосується Windows, до своєї відповіді? Я дійсно повинен просто перейти на Linux ...
Бретт

39

Рішення для Windows

Біжи

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

від cmd в каталозі з вашим Gruntfile.js. Не забудьте поставити debugger;лінію в необхідних місцях.


3
Починаючи з бурчання 0,4, точка входу в грунт є частиною grunt-cliпакету:node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
mistaecko

4
Дуже дякую за вказівки Windows. Ви можете використовувати тильд, щоб зробити це трохи менш тендітнимnode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
Джордж Мауер

Людина, я щойно витратив 30 хвилин на те, щоб зрозуміти це, а потім оновив свою відповідь! Я повинен був просто прокрутити вниз!
Девід Сутер

1
Не забудьте відкрити ще одну консоль і запуститиnode-inspector
valter.santos.matos

@ valter.santos.matos насправді саме зараз ви повинні використовувати вузол --інспект, згаданий нижче
Джекі

7

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

#!/usr/bin/env node

До

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

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

Однак цього робити не зовсім достатньо, оскільки ви не зможете знайти ваш файл js грубого завдання в спадному інспекторі вузлів, тому вам доведеться змінити файл, який вас зацікавив у налагодженні, додавши debugger;де ви хочете, щоб сталася точка перелому. Тепер ви можете натиснути продовження після першого перерви, і ви зламаєтесь на debugger;лінії

Досить дивовижно, але це єдиний шлях, який я знайшов поки що.


2
Це надзвичайно дивовижно, оскільки воно покладається на різноманітну поведінку в / usr / bin / env та незадокументовану магію між # та \ n у рядку shebang.
Девід Сутер

2
Це не працює для мене. Grunt як і раніше працює без режиму налагодження.
Євген Глухотеренко

@DavidSouther Shebangs - це недокументована магія. Вони стандартизовані в поведінці POSIX
Miles Rout

6

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

Ось розділ Gruntfile, який ілюструє, як можна налагоджувати завдання grunt, використовуючи grunt-node-inspector, grunt-concurrent і grunt-shell: https://github.com/CabinJS/Cabin/blob/master/Gruntfile. js # L44-L77


Ти думаєш, запускай node --debug-brk $(which grunt) node-inspector build testщось таке? Мені це подобається.
Девід Сутер

Досить багато, за винятком того, що я використовую одночасно, тому що node-inspectorне виходитимуть і не дозволятиму buildта testпрацювати, оскільки він працює вічно. Я додав посилання на фрагмент, де я його налаштував.
ChrisWren

Хм. По-друге, думка ... Мій робочий процес у мене тільки починається node-inspector &, залишаючи його на задньому плані і називаючи це виконаним. Якісь ваші думки з цього приводу?
Девід Сутер

1
Не знаю чому, але це, здається, не працює для мене. Я запускаю команду, grunt node-inspectorа потім переходжу до URL-адреси localhost і не бачу вихідних файлів. Просто порожні інструменти налагодження.
Кріс Голленбек

Мені вдалося змусити джерело відобразитися, виконавши дві окремі команди. grunt node-inspectorі node --debug-brk Gruntfile.jsз мого каталогу бурчання. Однак коли я встановив точку розриву у файлі grunt, він просто збоїть із помилкою підключення.
Кріс Холленбек

4

Я виконав завдання запустити свою програму та запустити інспектор вузлів. Це набагато краще, ніж поточна пропозиція, ви просто повинні додати це завдання в 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');
    });

1
Автор грант-вузла-інспектор має право. Це рішення працює лише в середовищі posix, тоді як його легше налаштувати інспектор вузлів і одночасно працює з posix та windows.
rainabba

3

Чудові відповіді тут. У 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-адресу в хромі, і ви готові йти!

Я використовую Node 7.3.0 і перебуваю на Mac. Можливо, вам доведеться дотримуватися деяких порад в інших публікаціях, щоб розпочати роботу в Windows.


2

Оновлення 2019 року

  • Якщо ви хочете запустити грунтове завдання в режимі налагодження і перерватися на перший рядок:

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

  • Якщо ви хочете запустити грунтове завдання в режимі налагодження на певному порту:

    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
    }
  ]
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.