Выполнение существующей задачи с помощью gulp -watch
У меня есть некоторые задачи, уже определенные в gulpfile.js
, и я хочу использовать плагин gulp-watch
(для запуска задач в новых файлах). Мой вопрос в том, что я ничего не мог найти, могу ли я запустить свои существующие задачи во время работы функции watch (from plugin)?
var gulp = require('gulp'),
watch = require('gulp-watch'),
...;
gulp.task('lint', function () {
return gulp.src(path.scripts)
.pipe(jshint())
.pipe(jshint.reporter(stylish));
});
gulp.task('watch', function () {
watch({ glob: 'app/**/*.js' }); // Run 'lint' task for those files
});
Потому что я не хочу включать задачу watch()
в каждую заданную мной задачу. Я хотел бы иметь только 1 задачу - часы, которые будут сочетать все "часы".
----- РЕДАКТИРОВАТЬ ----
(как я, вероятно, не совсем понял):
Мне нужно запустить задачу из задачи gulp('watch')
. например:
как я сделал это с gulp.watch
:
gulp.task('watch', function () {
gulp.watch('files', ['task1', 'task2']);
});
Мне нужно сделать то же самое, но с плагином gulp-watch
, что-то вроде (я знаю, что это не сработает):
var watch = require('gulp-watch');
gulp.task('watch', function () {
watch({ glob: 'files' }, ['task1', 'task2']);
});
Ответы
Ответ 1
Я также столкнулся с проблемой использования gulp -watch (не gulp.watch), которому нужно использовать форму обратного вызова, и возникли проблемы с поиском подходящего способа запуска задачи в обратном вызове.
Моим вариантом было то, что я хотел посмотреть все файлы стилусов, но обрабатывать только основной файл стилуса, который включает в себя все остальные. Более новые версии gulp -watch могут адресовать это, но у меня проблемы с 4.3.x, поэтому я застрял в 4.2.5.
- gulp.run устарел, поэтому я не хочу его использовать.
- gulp.start хорошо работает, но также советует gulp author, contra.
- Плагин последовательности выполнения работает хорошо и позволяет определить прогон
порядок, но это самопровозглашенный взлом:
https://www.npmjs.com/package/run-sequence
- Contra предлагает писать простые старые функции и звонить
те. Это новая идея для меня, но я думаю, что приведенный ниже пример отражает эту идею. https://github.com/gulpjs/gulp/issues/505
Сделайте выбор.
var gulp = require('gulp'),
watch = require('gulp-watch'), // not gulp.watch
runSequence = require('run-sequence');
// plain old js function
var runStylus = function() {
return gulp.src('index.styl')
.pipe(...) // process single file
}
gulp.task('stylus', runStylus);
gulp.task('watch', function() {
// watch many files
watch('*.styl', function() {
runSequence('stylus');
OR
gulp.start('stylus');
OR
runStylus();
});
});
Все это работает для меня без предупреждений, но я до сих пор не уверен в получении "сделанного" обратного вызова из версии 4.2.x gulp -watch.
Ответ 2
Скорее всего, вы захотите запустить определенные задачи, связанные с файлами, которые вы просматриваете -
gulp.task('watch',['lint'], function () {
gulp.watch('app/**/*.js' , ['lint']);
});
Вы также можете использовать часть ['lint']
для запуска любых требуемых задач при первом вызове вызова или использовать задачи для запуска async с помощью
gulp.task('default', ['lint','watch'])
Ответ 3
Вы можете просто вызвать одну задачу, которая включает в себя обе задачи
gulp.task('default', ['lint','watch'])
поэтому здесь вы просто назовете 'gulp'
Ответ 4
gulp.task('watch', function() {
watch(files, function() {
gulp.run(['task1', 'task2']);
});
});
работает нормально, кроме предупреждения