现状
我们有一组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"]);
});
问题
这是正确的方法吗?
我们怀疑我们应该使用基于流的方法,使用手表的更改事件来启动所需的目标。基于流的方法会更有意义吗?