簡體   English   中英

gulp.watch在Windows上只運行一次

[英]gulp.watch running only once on Windows

我剛剛開始使用Gulp來改進我的工作流程。 我目前有一個稱為styles的任務,它編譯.less文件,以及一個名為watch的任務,用於監視任何.less文件中的更改,然后運行styles任務。 我的gulpfile.js包含以下代碼:

var gulp = require( 'gulp' ),
        less = require( 'gulp-less' ),
        autoprefixer = require( 'gulp-autoprefixer' ),
        minifycss = require( 'gulp-minify-css' ),
        jshint = require( 'gulp-jshint' ),
        uglify = require( 'gulp-uglify' ),
        imagemin = require( 'gulp-imagemin' ),
        rename = require( 'gulp-rename' ),
        clean = require( 'gulp-clean' ),
        concat = require( 'gulp-concat' ),
        notify = require( 'gulp-notify' ),
        cache = require( 'gulp-cache' ),
        header = require( 'gulp-header' ),
        footer = require( 'gulp-footer' );

// styles task
gulp.task( 'styles', function() {
    return gulp.src( 'src/styles/main.less' )
        .pipe( less({ paths: ['src/styles/'] }) )
        .pipe( autoprefixer( 'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4' ) )
        .pipe( gulp.dest( 'dist/assets/css' ) )
        .pipe( rename( 'main.min.css' ) )
        .pipe( minifycss() )
        .pipe( gulp.dest( 'dist/assets/css' ) )
        .pipe( notify({ message: 'Styles task complete' }) );
} )

(...)

// watch task
gulp.task('watch', function() {

    // Watch .less files
    gulp.watch('src/styles/**/*.less', function(event) {
        console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
        gulp.run('styles');
    });
});

問題是,當我運行gulp watch ,它會在我第一次更改.less文件時啟動任務並運行styles任務。 在第一次之后,我只記錄了消息( File X was changed, running tasks... )。 難道我做錯了什么?

感謝任何提示或幫助!

編輯

只需要一些信息:我正在使用Gulp 3.4.0運行Node.js 0.10.24 以下是提示輸出的屏幕截圖:

節點命令提示符運行gulp監視任務

在@SteveLacy建議打破我的任務部分並檢查其中是否有任何一個導致麻煩之后,我得到了我的真正愚蠢的錯誤導致錯誤: gulp-notify僅適用於Mac和Linux,我的操作系統是Windows。 從插件描述:

使用node-notifier模塊向Mac Notification Center或Linux通知(使用notify-send)發送消息。 也可以指定自定義通知程序(例如Growl通知)。

對我感到羞恥。

我按照一個非常好的教程開始使用Gulp,而gulp-notify是其中使用的插件之一。 我的mystake沒有注意插件的細節。

我從gulpfile.js刪除了gulpfile.js gulp-notify后,一切正常,我得到了所有正確的日志,我的gulp watch任務就像一個魅力!

簡而言之: AWAYS檢查插件與您的操作系統的兼容性。

感謝所有花時間試圖幫助我的人!

我遇到了同樣的問題,而且我的新手問題很嚴重。 如果有人像我一樣對我說是新的,那么確保你的觸發監視函數以done()結束:

gulp.task("watch", function() {
  gulp.watch("lib/*.js, "foobar");
});

gulp.task("foobar", function(done) {
  // This task completion was omitted.
  done();
});

如果我沒記錯gulp.run在Gulp 3.5版中已被棄用。 嘗試替換gulp.run(); gulp.start(); 並看看是否有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM