2016-08-27 2 views
0

Кажется, у меня проблема с тем, как задачи хранятся в моих переменных или что-то в этом роде. Я динамически создаю задачи, основываясь на том, сколько файлов 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/ Как эти задачи не установлены правильно?

ответ

0

Я думаю, что ответы здесь помогут:

creating tasks using a loop [gulp]

Ваш цикл над siteNames будет уже завершен/достиг последнего Имя_узел по времени функциональности вашего глотка задачи вызываются/называется.

попробовать что-то вроде этого:

var siteNames = ['my-app', 'my-other-app']; 

... 

function prepareTasks(filename, extension) { 

    .... 


    siteNames.forEach(function(siteName) { 

     var taskName = siteName + '-' + filename + '-' + extension; 

     .... 

     gulp.task(taskName, function() { 
      setScssTasks(siteName, filename, paths); 
     }); 
    }); 
} 
+0

Это работает! Я все еще не совсем понимаю, как это может быть состояние гонки. По моему мнению, цикл for over siteNames запускает отдельные задачи (например, my-app-main-scss) с определенными siteNames [site] (например: my-app), а затем после этого запускает задачи по умолчанию, которые имеют уже установлены. Я не вижу, как имена сайтаNames [site] или taskName внутри настройки задачи теряются/перезаписываются. Это чтение может также помочь мне или кому-то https://github.com/gulpjs/gulp/issues/1581. но это работает :) – lscmaro

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