Как отладить задачу Gulp?

#javascript #node.js #debugging #gulp

#javascript #node.js #отладка #gulp

Вопрос:

Как мне отладить задачу gulp, определенную в my gulpfile.js , с помощью отладчика, такого как отладчик Google Chrome, пошагово просматривая код задачи построчно?

Ответ №1:

С Node.js версия 6.3 вы можете использовать этот --inspect флаг при выполнении своей задачи.

Для отладки задачи gulp с именем css :

  1. Узнайте, где находится ваш исполняемый файл gulp. Если gulp установлен локально, это будет at node_modules/.bin/gulp . Если gulp установлен глобально, запустите which gulp (Linux / Mac) или where gulp (Windows) в терминале, чтобы найти его.
  2. Запустите одну из этих команд в соответствии с вашей версией Node.js . При необходимости ./node_modules/.bin/gulp замените путь к вашей установке gulp с шага 1.
    • Node.js 6.3 : node --inspect --debug-brk ./node_modules/.bin/gulp css
    • Node.js 7 : node --inspect-brk ./node_modules/.bin/gulp css
  3. Используйте Chrome для просмотра chrome://inspect .

The --debug-brk (Node.js 6.3 ) и --inspect-brk (Node.js 7 ) флаги используются для приостановки выполнения кода в первой строке кода вашей задачи. Это дает вам возможность открыть отладчик Chrome и установить точки останова до завершения задачи.

Если вы не хотите, чтобы отладчик останавливался на первой строке кода, просто используйте --inspect флаг.

Вы также можете установить Node.js Расширение Inspector Manager (NIM) для Chrome, помогающее выполнить шаг 3. Это автоматически откроет вкладку Chrome с готовым к работе отладчиком в качестве альтернативы ручному переходу по URL-адресу.

Комментарии:

1. После загрузки добавьте точку останова в gulp.js после require(env.configPath); этого загружается ваш файл gulp, чтобы вы могли найти его в исходных текстах и добавить точки останова.

2. Просто перейдите к chrome://inspect , вам не нужно знать адрес devtools

3. В более новых версиях node now флаги узлов были объединены в просто --inspect-brk

4. Мне пришлось использовать ./node_modules/gulp/bin/gulp.js вместо ./node_modules/.bin/gulp

5. Другой способ установки точек останова (помимо @TrueWill): используйте Add folder to workspace на вкладке Sources , теперь вы можете выбрать любой файл, в котором определена ваша задача, а затем установить точки останова по своему усмотрению.

Ответ №2:

Для всех, кто использует VS Code 1.10

  1. Откройте панель отладки.
  2. Нажмите на значок настроек.
  3. Нажмите на кнопку Добавить конфигурацию.
  4. Выберите Node.js : Задача глотка.

Вот как должен выглядеть ваш файл launch.json.

 {
  // 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": "launch",
      "name": "Gulp task",
      "program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js",
      "args": [
        "yourGulpTaskName"
      ]
    }
  ]
}
 

Комментарии:

1. Спасибо за этот пример!

2. При использовании VS Code для добавления новой конфигурации сборки возникает Node.js : Шаблон задачи Gulp вы можете выбрать сами. Он вставит новую конфигурацию, которая выглядит как приведенный выше код. Нет необходимости копировать и вставлять 🙂

3. хорошо, так что это конфигурация — но как я могу начать с отладки?

4. Я не знаю почему, но при такой конфигурации я не могу установить точки останова. Вместо этого сработал метод добавления console.log(...) операторов в мой код.

5. Возможно, это было связано с тем фактом, что мой файл Gulf был назван Gulpfile.js , потому что я переименовал его gulpfile.js , и теперь срабатывают точки останова (я на Windows с VS Code 1.45.1).

Ответ №3:

Если вы используете webstorm, вы можете щелкнуть правой кнопкой мыши задачу на панели gulp и выбрать debug.

введите описание изображения здесь

Ответ №4:

Спасибо пользователю 2943490, в Windows я обнаружил, что эта версия работает для меня:

 node --inspect --debug-brk ./node_modules/gulp/bin/gulp.js --verbose 

Комментарии:

1. спасибо, таргетинг./node_modules/gulp/bin/gulp.js помог мне выбраться

Ответ №5:

Если вы используете gulp-nodemon, вы можете сделать это в своем gulpfile. Просто передайте ему опцию execMap:

 gulp.task('default', function() {
    nodemon({
        script: 'server.js',
        ext: 'js',
        execMap: {
            js: "node --inspect"
        }
    })
}
 

Надеюсь, это поможет.

Ответ №6:

Версия (node v8.11.3, npm 6.2.0, gulp 3.9.1)

Windows 10 и git bash

Установить Node.js V8 — диспетчер инспекторов (NiM) и настройка по вашему усмотрению

Попробуйте это:

 node --inspect-brk ./node_modules/gulp/bin/gulp.js --verbose
 

Ответ №7:

Мне понравился ответ @Avi Y. но я полагаю, что люди оценили бы более полный сценарий :

 gulp.task('nodemon', ['sass'], function(cb) {
var started = false;
    consoleLog('nodemon started');
return nodemon({
    //HERE REMOVE THE COMMENT AT THE BEGINING OF THE LINE YOU NEED
    //exec: 'node --inspect --debug-brk node_modules/gulp/bin/gulp.js', 
    exec: 'node --inspect --debug-brk',
    //exec: 'node --inspect',
    script: path.server,
    ignore: ['*/gulpfile.js', 'node_modules/*'],
    verbose: true
}).on('start', function() {
    if (!started) {
        cb();
        started = true;
    }
}).on('restart', function() {
    consoleLog('nodemon restarted the server');
});});