gulp.watch在Windows上只运行一次

时间:2014-01-27 18:55:24

标签: javascript node.js gulp

我刚刚开始使用 Gulp 来改善我的工作流程。我目前有一个名为styles的任务,用于编译.less个文件和一个名为watch的任务,以监视任何.less文件中的更改,然后运行{ {1}}任务。我的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文件时启动任务并运行styles任务。在第一次之后,我只记录了消息(.less)。我做错了吗?

感谢任何提示或帮助!

修改

根据要求提供一些信息:我正在使用 Gulp 3.4.0 运行 Node.js 0.10.24 。以下是提示输出的屏幕截图:

Node Command Prompt running gulp watch task

3 个答案:

答案 0 :(得分:9)

在@SteveLacy建议打破我的任务部分并检查其中是否有任何一个导致麻烦后,我得到了非常愚蠢错误导致错误:gulp-notify仅适用于Mac和Linux,我的操作系统是Windows。来自插件说明:

  

将消息发送到Mac通知中心或Linux通知(使用   notify-send)使用node-notifier模块。也可以指定自定义   通知者(例如低吼通知)。

对我感到羞耻。

我遵循了一个关于Gulp入门的非常好的教程,gulp-notify是其上使用的插件之一。我的mystake没有注意插件的细节。

我从gulp-notify删除gulpfile.js后,一切正常,我得到了所有正确的日志,我的gulp watch任务就像魅力一样!

简而言之: AWAYS检查插件与您的操作系统的兼容性。

感谢所有花时间试图帮助我的人!

答案 1 :(得分:3)

我遇到了同样的问题,而且我的新手问题很严重。如果有人像我一样对我来说是一个可怜的新手,请确保您的触发观看功能以done()结尾:

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

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

答案 2 :(得分:0)

如果我没记错gulp.run在Gulp 3.5版中已被弃用。尝试将gulp.run();替换为gulp.start();,看看是否有效。