Как задача gulp может узнать, запущена ли задача gulp.watch?

У меня есть задача gulp git, которая выполняет проверку, поэтому изменяет текущий рабочий каталог.

У меня также есть задачи gulp watch, которые перекомпилируют измененные файлы.

Я НЕ хочу запускать задачу git, если выполняется какая-либо задача наблюдения. Это перекомпилирует файлы в новой ветке.

Есть ли способ определить, запущена ли задача gulp watch? Если это так, я могу просто выйти из задачи git с предупреждающим сообщением.


person backspaces    schedule 10.07.2014    source источник


Ответы (2)


Для этого можно использовать плагин gulp-if.

Например, создайте переменную isWatching и при запуске задачи watch установите для нее значение true Затем в вашей задаче, которая запускает git, вы можете сделать: if(!isWatching, runGit), где runGit будет функцией, которая выполняет вашу задачу git или что-то еще


Пример PasteBin (для цветового кодирования)

person Olivier Clément    schedule 01.08.2014
comment
Я не думаю, что это работает, потому что gulp запустит отдельный процесс для двух задач (gulp watch& и gulp runGit). т.е. флаг должен быть каким-то образом глобальным, верно? .. или есть способ для задач gulp обмениваться переменными? - person backspaces; 02.08.2014
comment
Что ж, gulpfile — это простой JS, поэтому вы можете легко создать глобальную переменную и использовать ее. Это в значительной степени то, что я делаю, чтобы проверить, например, есть ли у меня флаг --prod, и в этом случае я буду условно запускать конкатенацию и минификацию скриптов. - person Olivier Clément; 04.08.2014
comment
Итак, позвольте мне убедиться, что вы говорите то, что я думаю: 1) запустите задачу наблюдения в фоновом режиме с помощью gulp watch&. 2) задайте для этой задачи глобальную переменную (т.е. в глобальном пространстве узла, что будет окном в браузере). 3) запустите отдельную команду gulp, gulp doGit (без &.. она завершается сразу). 4) эта задача каким-то образом сможет увидеть переменную, установленную 1)? Я не понимаю, как без использования чего-то специфичного для платформы, такого как переменная среды, у него будет новое глобальное пространство имен. - person backspaces; 04.08.2014
comment
Не совсем то, что я имел в виду, но близко к этому. Как и вы, я не думаю, что этот конкретный подход сработает именно по той причине, о которой вы упомянули. Вам нужно будет рассмотреть возможность запуска одного процесса за раз. Таким образом, выполнение gulp watch должно будет выполнить всю работу, так сказать. Позвольте мне обновить мой ответ примером (это может занять некоторое время, я занят неприятной ошибкой, поэтому, пожалуйста, наберитесь терпения :)) - person Olivier Clément; 05.08.2014
comment
Добавлен быстрый пример, дайте мне знать, если это имеет смысл для вас! - person Olivier Clément; 05.08.2014

Решение с использованием переменных окружения

gulp.task("build-typescript", () => {
     if (process.env.IS_GULP_WATCH !== 'true') {
         // this is gulp watch
     }        
     else
     {
         // this is not gulp watch
     }
});

gulp.task('watch-typescript', () => {
    process.env.IS_GULP_WATCH = 'true';
    // watch files
});
person fiat    schedule 30.10.2018