Кажется, у меня проблема с тем, как задачи хранятся в моих переменных или что-то в этом роде. Я динамически создаю задачи, основываясь на том, сколько файлов css, js-файлов и сайтов есть в моей сборке. Они являются массивы им дело:Почему мои задачи сборки Gulp не установлены правильно?
var styleNames = ['main'];
var scriptNames = ['main', 'head', 'libs'];
var siteNames = ['my-app', 'my-other-app'];
Итак, я пытаюсь создать main.css и соответствующие .js файлы для каждого siteNames.
//loop through style array and run function to build the tasks that should run on default
for (var style in styleNames) {
prepareTasks(styleNames[style], "scss");
}
for (var script in scriptNames) {
prepareTasks(scriptNames[script], "js");
}
Этот пробег:
function prepareTasks(filename, extension) {
//do this in a loop for every site
for (var site in siteNames) {
var taskName = siteNames[site] + '-' + filename + '-' + extension;
buildTasks.push(taskName);
var paths = [];
if (filename === 'main') {
paths = [
'!./src/' + extension + '/**/materialize/components/**',
'./src/' + extension + '/bootstrap/*.' + extension,
'./src/' + extension + '/plugins/*.' + extension,
'./src/' + extension + '/util/*.' + extension,
'!./src/' + extension + '/**/*@*.' + extension,
'./src/' + extension + '/**/*.' + extension,
'./src/modules/**/*.' + extension
]
} else {
paths = './src/' + extension + '/**/*@' + filename + '.' + extension;
}
if (extension === "scss") {
console.log(taskName);
console.log('^^ outside task in sass if')
gulp.task(taskName, function() {
console.log(taskName);
console.log('^^ inside sass task')
setScssTasks(siteNames[site], filename, paths);
});
} else if (extension === "js") {
gulp.task(taskName, function() {
setJSTasks(siteNames[site], filename, paths);
});
}
watchTasks.paths.push(paths);
watchTasks.taskNames.push(taskName);
}
};
После этой перспективы задача Глоток по умолчанию устанавливается:
gulp.task('default', buildTasks);
так, когда задача выполняется для «моего-приложение-главный-СКС», то console.log читает неправильный TASKNAME внутри задачи и неправильный siteName [сайт]. Он установлен на последний элемент в массивах. Вот jsfiddle всего моего кода: https://jsfiddle.net/zrcbzp99/ Как эти задачи не установлены правильно?
Это работает! Я все еще не совсем понимаю, как это может быть состояние гонки. По моему мнению, цикл for over siteNames запускает отдельные задачи (например, my-app-main-scss) с определенными siteNames [site] (например: my-app), а затем после этого запускает задачи по умолчанию, которые имеют уже установлены. Я не вижу, как имена сайтаNames [site] или taskName внутри настройки задачи теряются/перезаписываются. Это чтение может также помочь мне или кому-то https://github.com/gulpjs/gulp/issues/1581. но это работает :) – lscmaro