Задача Gulp выводится нормально при запуске вручную, не выводится при использовании в gulp.watch

У меня есть задача gulp, которая выполняет некоторые довольно распространенные задачи — она запускает jshint для проверки моего кода, затем объединяет и минимизирует файлы и выводит их в отдельные файлы .min.js.

Задача (кажется) выполняется безупречно, когда я запускаю ее вручную. Но когда я пытаюсь использовать его в $gulp.watch, он больше не выводит мой файл (хотя он все еще выполняется и выполняет jshint).

Код в моей задаче:

gulp.src(path.join(workingPath, folder, '/*.js'))
        .pipe(jshint())
        .pipe(jshint.reporter(stylish))
        .pipe(jshint.reporter('fail'))     //stop build if errors found
        .on('error', function() {
            console.log("Please review and correct jshint errors.");
            this.end();
        })
        .pipe(order([                      //order files before concat - ensure module definitions are first
            "*.module.js",
            "*.js"
        ]))
        .pipe(concat(filename+'.js'))
        .pipe(gulp.dest(destinationPath))   //full combined version
        .pipe(uglify())
        .pipe(rename(filename+'.min.js'))
        .pipe(gulp.dest(destinationPath))  //minified combined version
        .on('error',function() {
            console.log("An error occurred during Gulp processing.");
            this.end();
        });

Мои часы с глотком (задача называется «компоненты»):

  gulp.watch(componentsBasePath+"/**/*.js",['components']);

Однако я заметил одну вещь: в конце ручного запуска я вижу «Процесс завершен с кодом выхода..». И если я убью свой gulp.watch, он выведет «Процесс завершен с кодом выхода..» - тогда он ДЕЙСТВИТЕЛЬНО создает выходные файлы!

Моя цель состоит в том, чтобы моя задача «компоненты» создавала эти выходные файлы каждый раз, когда она запускается часами, а не только тогда, когда я убиваю часы.

Спасибо!
Клифф


person Cliff    schedule 24.06.2015    source источник


Ответы (2)


Итак, мой хакерский способ решить проблему с jetbrains (я использую phpstorm), вы должны понять 2 вещи.

  • gulp watchers действуют при сохранении файла.
  • jetbrains не будет автоматически обновлять файлы проекта (как вы узнали, он использует кеш).

Чтобы обойти эту проблему, я создал макрос saveSync, который выполняет следующие действия:

  1. Сохранить все
  2. Синхронизировать
  3. Синхронизировать
  4. Синхронизировать

Почему я синхронизировался 3 раза? Потому что gulp занимает несколько секунд для завершения задач (компиляция и т. д.), и если вы обновляете до их завершения, очевидно, что представление проекта не обновляется должным образом. Я не нашел способа вставить временную задержку в сам макрос.

После того, как я создал макрос, я просто вернул ctrl + s из «Сохранить все» в макрос, и это сработало.

Если есть «более чистый» способ сделать это, мне еще предстоит его обнаружить.

person marblewraith    schedule 26.06.2015

Запустил это кем-то другим, и он нашел причину проблемы. Хотя, оказывается, это вообще не связано с Gulp.

IDE, которую я использовал, мгновенно обновляла структуру папок и файлов, когда я вручную запускала задачу «компоненты», однако она не делала того же, когда я запускал задачу gulp.watch. Я рад сообщить, что файлы создавались успешно, они просто никогда не появлялись в IDE, пока я не убил задачу.

person Cliff    schedule 24.06.2015
comment
Просто из любопытства, ты случайно не использовал что-нибудь от Jetbrains? Если это так, есть способ решить эту проблему с помощью макросов. - person marblewraith; 25.06.2015
comment
Да! Не могли бы вы указать мне направление этого решения (используя макросы), пожалуйста? :) - person Cliff; 25.06.2015