2016-08-27 9 views
0

自分の変数などにタスクを格納する方法に問題があるようです。私は、与えられたビルドにいくつのCSSファイル、jsファイル、およびサイトがあるかに基づいて動的にタスクを作成しています。これらは、配列イムが扱っている:Gulpのビルドタスクが正しく設定されていないのはなぜですか?

var styleNames = ['main']; 
var scriptNames = ['main', 'head', 'libs']; 
var siteNames = ['my-app', 'my-other-app']; 

だから、私は各サイト名のためのmain.cssと関連の.jsファイルを作成しようとしています。

//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); 

タスクは「私のアプリ-メインSCSS」の実行時にそう、にconsole.logはタスク内の間違ったタスク名を読み取り、不正なsiteName [site]です。配列の最後の項目に設定されます。ここに私のコード全体のjsfiddleがあります:https://jsfiddle.net/zrcbzp99/ どのようにこれらのタスクが正しく設定されていませんか?私はここで答えだと思う

答えて

0

がお手伝いします:

creating tasks using a loop [gulp]

あなたのサイト名をループするためには、すでに完了しています/あなたの一気タスクの機能を呼び出す/呼び出された時点で最後のサイト名のに達しました。

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

これは動作します:

はこのような何かを試してみてください!私はまだそれが競争状態かもしれない方法を完全に理解していない。私の理解から、siteNames上のforループは、特定のsiteNames [site](例:my-app)で個々のタスク(例:my-app-main-scss)を設定し、すでに設定されています。タスクセットアップ内のsiteNames [site]またはtaskNameの参照が失われたり上書きされたりすることはありません。この読書は私または誰かにも役立つかもしれませんhttps://github.com/gulpjs/gulp/issues/1581。しかし、これは動作します:) – lscmaro

関連する問題