Використання вузла-інспектора із завданнями 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.