J'ai la tâche suivante dans mon gulpFile
, créée par quelqu'un d'autre de mon équipe:
gulp.task('serve', [], function(){
gulp.run(
'fonts',
'browsersync',
'watch'
);
});
Je voudrais le laisser seul, mais je voulais également mapper la tâche par défaut à cette tâche. J'ai donc essayé:
gulp.task('default',['serve']);
Cela semblait fonctionner, dans la mesure où le serveur fonctionne, mais pour une raison quelconque, la tâche de "surveillance" ne se produit pas, je ne reçois pas d'actualisation du navigateur sur les modifications.
Tout fonctionne comme prévu si je lance "gulp serve" mais pas "gulp". Qu'ai-je fait de mal?
EDIT: Voici la tâche de surveillance:
gulp.task('watch', ['styles', 'browsersync'], function() { //'default'
gulp.watch(
[
'./app/assets/sass/**/*.scss',
'./app/modules/**/*.scss'
], ['styles']);
gulp.watch([
'./app/**/*.js',
'./app/**/*.html'
], function() {
reload();
});
});
Essayez de mettre à jour votre tâche par défaut pour inclure la tâche de surveillance dans l'argument tableau au lieu de l'exécuter dans serve
. Ainsi:
gulp.task('default', ['serve', 'watch']);
Si vous extrayez la documentation de Gulp sur prise en charge des tâches asynchrones , en particulier le dernier exemple, vous verrez que vous pouvez exiger qu'une tâche dépendante se termine avant que la tâche désignée ne soit censée démarrer.
var gulp = require('gulp');
// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
// do stuff -- async or otherwise
cb(err); // if err is not null and not undefined, the run will stop, and note that it failed
});
// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
// task 'one' is done now
});
gulp.task('default', ['one', 'two']);
gulp.run
et gulp.start
sont considérés comme une mauvaise pratique:
https://github.com/gulpjs/gulp/issues/426
https://github.com/gulpjs/gulp/issues/505
Malheureusement, la réponse semble être que votre collègue ne comprend pas vraiment Gulp. Vous ne pourrez peut-être pas résoudre ce problème sans modifier leur code.
Sans plus de contexte, comme tout le fichier gulpfile, je ne peux pas reproduire votre problème exact. Cependant, mon intuition est que cela a quelque chose à voir avec la façon dont Gulp exécute les tâches de manière asynchrone/continue. Il se peut que votre tâche "par défaut" se termine prématurément, car gulp.run
ne s'exécute pas de manière synchrone. D'une manière ou d'une autre, Gulp est confus quant aux tâches qui doivent attendre sur quoi, quand. Vous utilisez deux outils complètement différents pour gérer votre séquence d'exécution.
Au lieu de gulp.run
, votre tâche "servir" devrait vraiment utiliser des dépendances pour exécuter d'autres tâches:
gulp.task('serve', ['fonts', 'browsersync', 'watch']);
gulp.task('default', ['serve']);
En outre, il convient de souligner que votre tâche de surveillance répertorie déjà la "synchronisation du navigateur" comme une dépendance. Bien qu'il ne soit pas techniquement incorrect (Gulp l'ignorera la deuxième fois), il peut conduire à une surcompensation et à de la confusion et n'est donc probablement pas une bonne idée. Si 'watch' dépend de 'Browsersync', vous pouvez simplement supprimer la dépendance 'Browsersync' de 'serve':
gulp.task('watch', ['styles', 'browsersync'], function () {
gulp.watch([
'./app/assets/sass/**/*.scss',
'./app/modules/**/*.scss'
], ['styles']);
gulp.watch([
'./app/**/*.js',
'./app/**/*.html'
], function() {
reload();
});
});
gulp.task('serve', ['fonts', 'watch']);
gulp.task('default', ['serve']);
Cela devrait vous donner le résultat que vous recherchez.
Cela étant dit, si vous insistez vraiment pour suivre une mauvaise pratique, vous pouvez essayer d'utiliser gulp.run
dans votre tâche "par défaut":
gulp.task('default', function() {
gulp.run('serve');
});
Je soupçonne que votre problème principal est que vous mélangez l'utilisation des dépendances des tâches de tableau et gulp.run
, mais de toute façon, gulp.run
c'est "mal faire".