J'ai quelque chose comme ça:
gulp.task('default', ['css', 'browser-sync'] , function() {
gulp.watch(['sass/**/*.scss', 'layouts/*.css'], function() {
gulp.run('css');
});
});
mais cela ne fonctionne pas, car il surveille les deux répertoires, sass et layouts.
Comment puis-je le faire fonctionner, de sorte que gulp surveille tout ce qui se passe dans ces répertoires?
gulp.task('default', ['css', 'browser-sync'] , function() {
gulp.watch(['sass/**/*.scss', 'layouts/**/*.css'], ['css']);
});
sass/**/*.scss
et layouts/**/*.css
suivront dans chaque répertoire et sous-répertoire les modifications apportées aux fichiers .scss
et .css
qui changent. Si vous voulez changer cela en any file, créez le dernier bit *.*
Vous pouvez écrire une montre comme celle-ci.
gulp.task('watch', function() {
gulp.watch('path/to/file', ['gulp task name for css/scss']);
gulp.watch('path/to/file', ['gulp task name for js']);
});
De cette façon, vous pouvez configurer autant de tâches que vous le souhaitez via le chemin du fichier que vous souhaitez regarder, suivi du nom de la tâche que vous avez créée. Ensuite, vous pouvez écrire votre valeur par défaut comme ceci:
gulp.task('default', ['gulp task name for css/scss', 'gulp task name for js']);
Si vous voulez simplement surveiller les modifications de fichiers, regardez simplement les fichiers en utilisant glob comme *.css
dans votre tâche.
Un problème qui a surgi pour plusieurs personnes (y compris moi) est que l'ajout d'un gulp.filter en dehors de la tâche entraîne l'échec de gulp.watch après le premier passage. Donc, si vous avez quelque chose comme ça:
var filter = gulpFilter(['fileToExclude.js'])
gulp.task('newTask', function(){ ...
Ensuite, vous devez le changer pour:
gulp.task('newTask', function(){
var filter = gulpFilter(['fileToExclude.js'])
Le filtre doit être inclus dans la fonction de tâche. J'espère que ça aide quelqu'un.
Cela fonctionne pour moi (Gulp 4):
function watchSass() {
return gulp.watch(sassGlob, { ignoreInitial: false }, buildCss)
}
function watchImages() {
return gulp.watch(imagesGlob, copyImages)
}
exports.watch = gulp.parallel(watchSass, watchImages)
@ A.J La réponse d'Alger a fonctionné pour moi avec Gulp v3.x.
Mais en commençant par Gulp 4, ce qui suit semble fonctionner pour moi.
Notez que chaque tâche doit renvoyer une valeur ou appelez "done ()". La tâche principale dans cet exemple est 'watchSrc' qui appelle en parallèle les autres tâches.
gulp.task('watchHtml', function(){
return watch('src/**/*.html', function () {
gulp.src('src/**/*')
.pipe(gulp.dest(BUILD_DIR))
})
})
gulp.task('watchJS', function(){
return watch('src/**/*.js', 'devJS')
})
gulp.task('watchCSS', function(){
return watch(['src/**/*.css', 'src/**/*.scss'], 'buildStyles')
})
gulp.task('watchSrc', gulp.parallel('watchHtml', 'watchJS', 'watchCSS'), function(done)
{
done()
})
Si vous convertissez vos tâches en fonctions
function task1(){
return gulp...
...
}
Il existe alors 2 méthodes utiles que vous pouvez utiliser:
GULP.SERIES exécutera les tâches de manière synchrone
gulp.task('default', gulp.series(task1,task2));
GULP.PARALLEL les exécutera de manière asynchrone
gulp.task('default', gulp.parallel(task1,task2));