2016-06-16 5 views
0

Я использую gulp 4.0. И у меня есть, это 'watch' задача:Gulp.js. Та же задача на часах с различными параллельными задачами

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

Итак, вопрос в следующем: как я могу заменить его одной задачей?

Вы не можете. Задачи не могут принимать аргументы. Единственным вариантом является создание функции:

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")); 
}); 

Обратите внимание, что приведенный выше код предполагает, что вы хотите, чтобы очистить sass и jade кэшей перед запуском sass и jade задач. Если это наоборот, вам придется соответствующим образом настроить его.

+0

Спасибо! Точно, что мне нужно, но как насчет этого: https://jsfiddle.net/AleshaOleg/hmdkbm7k Почему это не выполняет мои задачи? – AleshaOleg

+0

Он выполняет ваши задачи. Но только при удалении файла, поскольку вы зарегистрировали свою функцию только для события 'unlink'. –

+0

Это не потому, что когда у меня есть событие 'all', имя файла определено. Но когда я оставляю событие для 'unlink',' filename' не определяется. вы знаете, где проблема? – AleshaOleg

Смежные вопросы