Gulp.js.手表上的相同任务,具有不同的并行任务

时间:2016-06-16 00:34:34

标签: gulp gulp-watch

我使用gulp 4.0。我有,'watch'任务:

gulp.task("watch", function() {
    gulp.watch("scss/*.scss", gulp.series("sass")).on("unlink", function(filepath) {
        remember.forget("sass", path.resolve(filepath));
        delete cached.caches.sass[path.resolve(filepath)];
    });
    gulp.watch("templates/**/*.jade", gulp.series("jade")).on("unlink", function(filepath) {
        remember.forget("jade", path.resolve(filepath));
        delete cached.caches.jade[path.resolve(filepath)];
    });
});

所以,我有两行:

remember.forget("jade", path.resolve(filepath));
delete cached.caches.jade[path.resolve(filepath)];

如果它是管道,则很容易创建新任务,然后运行它们。但在这里,我有一个参数(参数) - filepath

所以,问题是:如何用一个任务替换它?没有重复这两行。

1 个答案:

答案 0 :(得分:1)

  

所以,问题是:如何用一个任务替换它?

你不能。任务不能参数。您唯一的选择是创建一个功能:

function runTask(taskName) {
  return function(evt, filepath) {
    if (evt === "unlink") {
      remember.forget(taskName, path.resolve(filepath));
      delete cached.caches[taskName][path.resolve(filepath)];
    }
    gulp.series(taskName)();
  };
}

gulp.task("watch", function() {
  gulp.watch("scss/*.scss").on("all", runTask("sass"));
  gulp.watch("templates/**/*.jade").on("all", runTask("jade"));
});

请注意,上述代码假定您要在运行sassjade任务之前清除sassjade缓存。如果相反,你必须相应地调整它。