手动运行时Gulp任务输出正常,在gulp.watch

时间:2015-06-24 17:13:15

标签: gulp gulp-watch

我有一个gulp任务执行一些非常常见的任务 - 它运行jshint来验证我的代码,然后进行concats并最小化文件并将它们输出到单个.min.js文件中。

当我手动运行时,任务(看起来)完美无缺地执行。但第二次尝试在$ gulp.watch中使用它不再输出我的文件(它仍然执行并执行jshint)。

我的任务中的代码:

gulp.src(path.join(workingPath, folder, '/*.js'))
        .pipe(jshint())
        .pipe(jshint.reporter(stylish))
        .pipe(jshint.reporter('fail'))     //stop build if errors found
        .on('error', function() {
            console.log("Please review and correct jshint errors.");
            this.end();
        })
        .pipe(order([                      //order files before concat - ensure module definitions are first
            "*.module.js",
            "*.js"
        ]))
        .pipe(concat(filename+'.js'))
        .pipe(gulp.dest(destinationPath))   //full combined version
        .pipe(uglify())
        .pipe(rename(filename+'.min.js'))
        .pipe(gulp.dest(destinationPath))  //minified combined version
        .on('error',function() {
            console.log("An error occurred during Gulp processing.");
            this.end();
        });

我的gulp手表(任务名称'组件'):

  gulp.watch(componentsBasePath+"/**/*.js",['components']);

我注意到的一件事是在手动运行结束时我看到"流程已完成退出代码.."。如果我杀了我的gulp.watch它输出"处理完成退出代码.." - 然后它会创建输出文件!

我的目标是拥有我的组件'每次手表触发时,任务都会创建这些输出文件 - 而不仅仅是当我杀死手表时。

谢谢! 崖

2 个答案:

答案 0 :(得分:1)

好的,所以我用解决jetbrains问题的hacky方法(即使用phpstorm),你必须了解2件事。

  • gulp watchers对档案保存。
  • jetbrains不会自动更新项目文件(因为你发现它使用了缓存)。

为了解决这个问题,我创建了一个名为saveSync的宏,它执行以下操作:

  1. 全部保存
  2. 同步
  3. 同步
  4. 同步
  5. 为什么我要同步3次?因为gulp需要几秒钟来完成任务(编译等),如果你在完成之前更新,显然项目视图没有正确更新。我还没有找到一种方法将时间延迟插入宏本身。

    在我创建宏之后,我只是将ctrl + s从全部保存到宏,然后就可以了。

    如果有一种“更清洁”的方式,我还没有发现它。

答案 1 :(得分:0)

由其他人来做这个,他找到了问题的原因。虽然 - 结果并不是Gulp相关的。

当我手动运行'组件'任务时,我正在使用的IDE立即更新了文件夹和文件结构,但是当我运行gulp.watch任务时它没有做同样的事情。我很高兴地报告说文件是成功创建的,但是在我杀死任务之前它们从未出现在IDE中。