2016-04-04 9 views
1

Wie würde ich gehen über das Hinzufügen von einigen js-Dateien in einer bestimmten Reihenfolge als alle anderen verbleibenden? Ich dachte, dies zu tun:Gulp Concat-Dateien in Reihenfolge, dann alle anderen js-Dateien

var concat = require('gulp-concat'); 

gulp.task('scripts', function() { 
    return gulp.src(['./lib/file3.js', './lib/file1.js', './lib/file2.js', './lib/**/*.js']) 
    .pipe(concat('all.js')) 
    .pipe(gulp.dest('./dist/')); 
}); 

Nicht sicher, ob das würde dann hinzufügen wieder bereits concated Dateien, da ich eine glob verwenden.

Antwort

0

gulp.src() verwendet node-glob. Wenn man sich die source code von node-glob aussehen geben die Autoren eine Pseudo-Code-Beschreibung des Algorithmus (verkürzt, Quellcode für volle Pseudocode):

// 1. Get the minimatch set 
// 2. For each pattern in the set, PROCESS(pattern, false) 
// 3. Store matches per-set, then uniq them 

Was bedeutet dies für Sie ist:

Bestellung ist erhalten. Die Dateien ./lib/file3.js, ./lib/file1.js und ./lib/file2.js werden in dieser Reihenfolge ausgegeben, wenn Sie sie in dieser Reihenfolge explizit an gulp.src() übergeben. Keine Notwendigkeit, gulp-order in diesem Fall zu verwenden.

Keine Duplikate. Da die Dateien uniqed sind, wird keiner von ihnen in Ihrem Schluckstrom zweimal ausgegeben. In der Tat nimmt node-glob bestimmte Vorsichtsmaßnahmen Duplikate für brace expansion zu verhindern:

nounique In einigen Fällen Klammer schäumten Muster in der gleichen Datei führen kann mehrfach in der Ergebnismenge zeigt sich. Standardmäßig verhindert diese Implementierung Duplikate in der Ergebnismenge. Setzen Sie dieses Flag, um dieses Verhalten zu deaktivieren.

Neben für symbolic links:

Beachten Sie, dass Verzeichnisse Symlink nicht als Teil eines ** gekrochen, obwohl ihr Inhalt gegen nachfolgende Teile des Musters entsprechen kann. Dies verhindert unendliche Schleifen und Duplikate und dergleichen.

TLDR: Ja, Ihr Code funktioniert.

2

Gulp-order könnte das sein, was Sie suchen. Ich habe den folgenden Code nicht getestet, aber die docs deuten darauf hin, dass es funktioniert. Wenn es nicht funktioniert, würde ich vorschlagen, dass Sie versuchen, mit dem letzten globstar genauer zu sein, so dass Sie, wenn möglich, nach Verzeichnissen suchen.

var order = require("gulp-order"); 

gulp.task('scripts', function() { 
    return gulp.src('./lib/**/*.js') 
    .pipe(order([ 
     'file3.js', 
     'file1.js', 
     'file2.js', 
     '**/*.js' 
    ])) 
    .pipe(concat('all.js')) 
    .pipe(gulp.dest('./dist/')); 
}); 

Es gibt auch eine article mit einem Arbeitsbeispiel.

Verwandte Themen