gulp-watch只运行一次

时间:2019-01-06 18:53:25

标签: node.js wordpress ubuntu-14.04 gulp-watch npm-scripts

Gulp watch在第一次更改时仅运行一次。我正在Ubuntu 14上的apache2上运行Wordpress,并且正在使用教程。它说明了如何使用gulp监视更改。对于第一个更改,它可以正常工作-刷新浏览器http://localhost:3000。我对设置gulp watch相当陌生,所以我对为什么只运行一次感到困惑。 gulpfile.js如下。如果有人需要其他任何澄清,请回来。谢谢

我已经完成了将其关闭然后再打开的编码版本。对于Stackoverflow和其他地方的此类问题,我已经进行了各种回复。

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()
}))

我希望每次代码更改都会更新浏览器视图和功能。仅在以“ gulp watch”开始吞咽后才发生一次。

3 个答案:

答案 0 :(得分:3)

仅执行一次的gulp任务通常表示gulp无法确定它是第一次完成,因此gulp不会再次运行它。

更改为此代码:

// 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();
});

我也看到了它建议使用以下监视声明的形式

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

代替

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

因此,如果回调解决方案不起作用,请尝试使用建议的watch形式。

答案 1 :(得分:0)

大家好,我处于相同的情况。我在Mamp Pro上运行Wordpress。从标记工作的答案为html更改,但我仍然停止Css en JS

如果有人能帮上忙,那就太棒了。

我的gulp文件是:

 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()
}))

答案 2 :(得分:-1)

根据stackoverflow的规则,我的声誉太低,无法告诉您Mark的答案根据他的答案的注释对我有用,因此我将其添加到此处。我们在我正在修读的Udemy课程中加入了gulp,这对于该站点上的许多用户来说是一个绊脚石。

其他人将不得不将其标记为正确答案。可能需要修改gulp.js以考虑此用例,但这是我第一次使用它。谢谢马克。