2016-08-09 79 views
1

Wie kann eine Variable (Array) in gulp.src(globs) verwendet werden?gulp.src (globs) Von einem variablen Array

Ich habe mehrere Gulp Aufgaben, die die gleiche "Gruppe" von Dateien verwenden, aber ich weiß nicht, wie die Aufgaben zu trocknen, die Variable in die Globs übergeben verwenden.

. . . 
var configDir = '../private/app/_config/', 
    configFiles = [ 
     configDir + 'categories.yaml', 
     configDir + 'params.yaml', 
     configDir + 'taxonomies.yaml' 
    ]; 

// Merge development config yaml(s) 
gulp.task('yaml_merge-dev', function() { 
    return gulp.src([ 
     'config.root.yaml', 
     configDir + 'site.dev.yaml', 
     configFiles 
     ]) 
    .pipe(yamlMerge('config.dev.yaml')) 
    .pipe(gulp.dest('../')); 
}); 

// Merge production config yaml(s) 
gulp.task('yaml_merge-prod', function() { 
    return gulp.src([ 
     'config.root.yaml', 
     configDir + 'site.prod.yaml', 
     configFiles 
     ]) 
    .pipe(yamlMerge('config.prod.yaml')) 
    .pipe(gulp.dest('../')); 
}) 
. . . // etc. 

Antwort

1

gulp.src() akzeptiert nur eine flache Anordnung von Dateien, nicht verschachtelten Arrays. Das bedeutet, dass Sie alle Dateien in configFiles zu dem Array hinzufügen müssen, das Sie an gulp.src() übergeben.

Da gulp nur JavaScript ist, können Sie eine der vielen Möglichkeiten verwenden, wie Sie Arrays in JavaScript kombinieren können. In Ihrem Fall Array.prototype.concat() ist wahrscheinlich die am besten geeignet:

gulp.task('yaml_merge-dev', function() { 
    return gulp.src([ 
    'config.root.yaml', 
    configDir + 'site.dev.yaml' 
    ].concat(configFiles)) 
    .pipe(yamlMerge('config.dev.yaml')) 
    .pipe(gulp.dest('../')); 
}); 
+0

Thx - ich es auch +, weil ich nicht von 'concat' dachte. Thnx wieder. – CelticParser

1

Sie sind richtig zu DRY Ihre Aufgaben zu wollen.

Mithilfe von yargs können Sie Ihren Code auf eine einzelne Aufgabe eingrenzen, die Befehlszeilenargumente verwendet.

Run:

npm install --save-dev yargs 

Javascript

. . . 
// Require yargs: https://www.npmjs.com/package/yargs 
var args = require('yargs').argv; 

// Site file based on argument 
var siteFile = args.release? 'site.prod.yaml' : 'site.dev.yaml'; 

// Merge config file based on argument 
var yamlMergeConfig = args.release? 'config.prod.yaml' : 'config.dev.yaml'; 

// Single declatations for readibility 
var configDir = '../private/app/_config/'; 

// Your config files in a single glob 
var configFiles = [ 
     configDir + 'categories.yaml', 
     configDir + 'params.yaml', 
     configDir + 'taxonomies.yaml' 
     configDir + siteFile 
    ]; 

gulp.task('yaml_merge', function() { 
    /// <summary> 
    /// Merge development or production config yaml(s) 
    /// gulp yaml_merge    : deploys the development build 
    /// gulp yaml_merge --release : deploys the release build 
    /// </summary> 
    return gulp.src(configFiles) 
    .pipe(yamlMerge(yamlMergeConfig)) 
    .pipe(gulp.dest('../')); 
}); 
. . . // etc. 
+0

Ich würde dir mehr Punkte geben, wenn ich könnte, aber Svens Antwort war im Rahmen der Frage. Ihre Antwort ist jedoch eine bessere Antwort aufgrund der Tatsache, dass Sie darüber hinaus gegangen sind, um die Aufgabe tatsächlich zu "trocknen". Ich bin mir sicher, dass Sie im Laufe der Zeit Punkte bekommen. – CelticParser

+0

Danke @CelticParser. Ich bin eigentlich mehr daran interessiert, Ideen auszutauschen, als Punkte zu bekommen, also keine Sorgen. Basierend auf dem Aufbau Ihrer Frage und den Ellipsen nahm ich an, dass Sie mehr Aufgaben haben, die davon abhängen, ob der Build für die Entwicklung oder die Veröffentlichung gedacht ist, wie wir es alle tun. Versuchen Sie also, mit Yargs herumzuspielen, und Sie werden viel mehr vom Schluck bekommen. –

+0

Awesome - Sie sind richtig! Ich habe deine Methode mit einigen Tweeks implementiert. Ich lerne immer auf einer (sehr) scharfen Kurve und das ist eine große Hilfe. Thnx wieder. – CelticParser