4
votes

gulp-watch ne fonctionne qu'une seule fois

Gulp watch ne s'exécute qu'une seule fois lors du premier changement. J'utilise Wordpress sur apache2 sur Ubuntu 14 et j'utilise un tutoriel. Il illustre comment utiliser gulp pour surveiller les changements. Cela fonctionne bien pour le premier changement - actualise le navigateur qui est http: // localhost: 3000 . Je suis assez nouveau dans la configuration de la montre gulp, je ne sais donc pas pourquoi elle ne fonctionne qu'une seule fois. Le gulpfile.js est le suivant. Si quelqu'un a besoin de quelque chose d'autre à clarifier, veuillez revenir. Merci

​​J'ai fait la version de codage pour l'éteindre et le rallumer. J'ai parcouru différentes réponses pour ce type de problème sur stackoverflow et d'autres endroits.

var gulp = require('gulp'),
   settings = require('./settings'),
   webpack = require('webpack'),
   browserSync = require('browser-sync').create(),
   postcss = require('gulp-postcss'),
   rgba = require('postcss-hexrgba'),
   autoprefixer = require('autoprefixer'),
   cssvars = require('postcss-simple-vars'),
   nested = require('postcss-nested'),
   cssImport = require('postcss-import'),
   mixins = require('postcss-mixins'),
   colorFunctions = require('postcss-color-function');

gulp.task('styles', function() {
  return gulp.src(settings.themeLocation + 'css/style.css')
    .pipe(postcss([cssImport, mixins, cssvars, nested, rgba, colorFunctions, autoprefixer]))
    .on('error', (error) => console.log(error.toString()))
    .pipe(gulp.dest(settings.themeLocation));
});

gulp.task('scripts', function(callback) {
  webpack(require('./webpack.config.js'), function(err, stats) {
    if (err) {
      console.log(err.toString());
    }

    console.log(stats.toString());
    callback();
  });
});

gulp.task('watch', function() {
 browserSync.init({
    notify: false,
    proxy: settings.urlToPreview,
    ghostMode: false
  });

  gulp.watch('./**/*.php', function() {
    browserSync.reload();
  });

  gulp.watch(settings.themeLocation + 'css/**/*.css', gulp.parallel('waitForStyles'));

  gulp.watch([settings.themeLocation + 'js/modules/*.js', settings.themeLocation + 'js/scripts.js'], 
       gulp.parallel('waitForScripts'));
});

gulp.task('waitForStyles', gulp.series('styles', function() {
  return gulp.src(settings.themeLocation + 'style.css')
    .pipe(browserSync.stream());
}))

gulp.task('waitForScripts', gulp.series('scripts', function(cb) {
  browserSync.reload();
  cb()
}))

Je m'attends à ce que la vue et les fonctionnalités du navigateur soient mises à jour à chaque changement de code. Cela ne se produit qu'une fois après avoir démarré gulp avec « gulp watch ».


3 commentaires

Essayez d'ajouter une fonction "callback" dans votre tâche "watch" comme vous l'avez fait avec la tâche "scripts" et voyez si cela vous aide.


Salut Marc merci pour votre réponse semble faire le travail: -)


Je pense que je vais l'ajouter comme réponse - une tâche exécutée une seule fois est généralement due au fait que gulp ne sait pas qu'elle s'est terminée la première fois.


3 Réponses :


12
votes

Une tâche gulp qui ne s'exécutera qu'une seule fois indique généralement que gulp est incapable de déterminer qu'elle a terminé la première fois et que gulp ne la réexécutera donc pas.

Changez pour ce code:

gulp.watch('src/pages/**/*.html', gulp.series(pages, browserSync.reload));

Je l'ai également vu suggéré d'utiliser ce formulaire de déclaration de surveillance:

gulp.watch('src/pages/**/*.html').on('change',gulp.series(pages, browser.reload));

au lieu de le plus couramment utilisé:

// notice the "done" added below
gulp.task('watch', function(done) {
 browserSync.init({
    notify: false,
    proxy: settings.urlToPreview,
    ghostMode: false
  });

  //  I also added a callback function below, just within this one gulp.watch
  gulp.watch('./**/*.php', function(done) {
    browserSync.reload();
    done();
  });

  gulp.watch(settings.themeLocation + 'css/**/*.css', gulp.parallel('waitForStyles'));
  gulp.watch([settings.themeLocation + 'js/modules/*.js', settings.themeLocation + 'js/scripts.js'], 
             gulp.parallel('waitForScripts'));
  done();
});

Donc, si la solution de rappel ne fonctionne pas, essayez d'utiliser la forme suggérée de watch . p >


1 commentaires

Une mise à jour pour ceci? Si la réponse fonctionne, veuillez l'accepter afin que les autres qui viennent ici le sachent aussi. Merci.



0
votes

Selon les règles de stackoverflow, ma réputation est trop basse pour vous dire que la réponse de Mark a fonctionné pour moi sous les commentaires de sa réponse, donc je l'ajouterai ici. Nous avons ajouté gulp au cours Udemy que je suis et cela a été une pierre d'achoppement pour de nombreux utilisateurs de ce site.

Quelqu'un d'autre devra la marquer comme une réponse correcte. Gulp.js devrait probablement être modifié pour prendre en compte ce cas d'utilisation, mais c'est la première fois que je l'utilise. Merci Mark.


0 commentaires

0
votes

Bonjour à tous, je suis dans la même situation. J'utilise Wordpress sur mamp pro. la réponse de mark work pour le changement html mais je continue de m'arrêter pour Css en JS

Si quelqu'un peut l'aider, ce sera super tx.

Mes gulpfiles sont:

 var gulp = require('gulp'),
settings = require('./settings'),
webpack = require('webpack'),
browserSync = require('browser-sync').create(),
postcss = require('gulp-postcss'),
rgba = require('postcss-hexrgba'),
autoprefixer = require('autoprefixer'),
cssvars = require('postcss-simple-vars'),
nested = require('postcss-nested'),
cssImport = require('postcss-import'),
mixins = require('postcss-mixins'),
colorFunctions = require('postcss-color-function');

gulp.task('styles', function() {
  return gulp.src(settings.themeLocation + 'css/style.css')
    .pipe(postcss([cssImport, mixins, cssvars, nested, rgba, colorFunctions, autoprefixer]))
    .on('error', (error) => console.log(error.toString()))
    .pipe(gulp.dest(settings.themeLocation));
});

gulp.task('scripts', function(callback) {
  webpack(require('./webpack.config.js'), function(err, stats) {
    if (err) {
      console.log(err.toString());
    }

    console.log(stats.toString());
    callback();
  });
});

gulp.task('watch', function(done) {
  browserSync.init({
    notify: false,
    proxy: settings.urlToPreview,
    ghostMode: false
  });

  gulp.watch('./**/*.php', function(done) {
    browserSync.reload();
    done();
  });
  gulp.watch(settings.themeLocation + 'css/**/*.css', gulp.parallel('waitForStyles'));
  gulp.watch([settings.themeLocation + 'js/modules/*.js', settings.themeLocation + 'js/scripts.js'], gulp.parallel('waitForScripts'));
});

gulp.task('waitForStyles', gulp.series('styles', function() {
  return gulp.src(settings.themeLocation + 'style.css')
    .pipe(browserSync.stream());
}))

gulp.task('waitForScripts', gulp.series('scripts', function(cb) {
  browserSync.reload();
  cb()
}))


0 commentaires