在目标之间共享gulp watch语句

时间:2015-02-18 18:48:24

标签: gulp gulp-watch

现状

我们有一组gulp监视语句,当src文件发生变化时,我们目前用它来触发重建:

gulp.task("dev:watch", function() {
    // General App JS
    gulp.watch([
        path.resolve(config.paths.root, "src/app/**/*.js"),
        "!" + path.resolve(config.paths.root, "src/app/**/*test.js")
    ], [
        "scripts:app"
    ]);

    // Templates
    gulp.watch([
        path.resolve(config.paths.root, "src/app/**/*.html")
    ], [
        "scripts:templates"
    ]);

    // Stylesheets
    gulp.watch([
        path.resolve(config.paths.root, "src/app/**/*.less"),
        path.resolve(config.paths.root, "src/styles/*.less"),
        path.resolve(config.paths.root, "src/styles/**/*.less")
    ], [
        "stylesheets"
    ]);
})

欲望

在我们的e2e测试中,我们希望在src文件发生变化时观看相同的文件并启动e2e测试运行。

我们希望将监视定义集中在一起(只声明监视文件一次),但将这些监视定义用于几个不同的目标(重建,启动e2e测试运行等)。

当前解决方案(我们想要评论)

我们将手表定义包装在javascript函数中并将它们移动到模块中。但解决方案似乎并不是很好。我们希望其他人可以评论并提供一些指导,以确定这是否是通过gulp实现这一目标的最佳方式。

包装和模块化观察定义: shared-watches.js

var path = require("path");

module.exports = function (gulp, config) {
    return {
        watchAppJs: function (gulpTargetsToRunAfterChange) {
            gulp.watch([
                path.resolve(config.paths.root, "src/app/**/*.js"),
                "!" + path.resolve(config.paths.root, "src/app/**/*test.js")
            ], gulpTargetsToRunAfterChange);
        },

        watchTemplates: function (gulpTargetsToRunAfterChange) {
            gulp.watch([
                path.resolve(config.paths.root, "src/app/**/*.html")
            ], gulpTargetsToRunAfterChange);
        },

        watchStylesheets: function (gulpTargetsToRunAfterChange) {
            gulp.watch([
                path.resolve(config.paths.root, "src/app/**/*.less"),
                path.resolve(config.paths.root, "src/styles/*.less"),
                path.resolve(config.paths.root, "src/styles/**/*.less")
            ], gulpTargetsToRunAfterChange);
        }    
};

使用集中监视功能

var sharedWatches = require("./shared-watches.js")(gulp, config);
gulp.task("dev:watch", function() {
    sharedWatches.watchAppJs(["scripts:app"]);
    sharedWatches.watchTemplates(["scripts:templates"]);
    sharedWatches.watchStylesheets(["stylesheets"]);
});


var sharedWatches = require("./shared-watches.js")(gulp, config);
gulp.task("test:e2e:autorun", ['test:e2e:continueOnError'], function () {
    sharedWatches.watchAppJs(["scripts:app", "test:e2e:continueOnError"]);
    sharedWatches.watchTemplates(["scripts:templates", "test:e2e:continueOnError"]);
    sharedWatches.watchStylesheets(["stylesheets", "test:e2e:continueOnError"]);
});

问题

这是正确的方法吗?

我们怀疑我们应该使用基于流的方法,使用手表的更改事件来启动所需的目标。基于流的方法会更有意义吗?

0 个答案:

没有答案