2014-05-06 12 views
6

Ich benutze das Gulp-Order-Modul zusammen mit dem Event-Streams-Modul und Gulp-Concat, um Javascript-Dateien in eine einzige Zieldatei zu verketten. Das Plugin gulp-order hat in anderen Projekten, in denen ich Dateien aus dem Stream in einer bestimmten Reihenfolge zusammenfügen wollte, gut funktioniert. Aus irgendeinem Grund funktioniert es in diesem Projekt nicht richtig und die Dateien im Verzeichnis public/angular/config sind auf die Dateien verteilt, die ich für die letzte Verknüpfung im Verzeichnis public/js angegeben habe. Ich denke, das könnte etwas mit der Angabe von multiplen Quellen zu tun haben, d. die eckigen und js Verzeichnisse. Ich habe versucht, die Ströme mit dem Ereignis-Modul Ströme ohne Glück verschmelzenden, während, wenn ich zuerst begann ich die mehrfachen Quellen, indem eine Anordnung zum gulp.src Funktion angegeben istGulp-Order-Node-Modul mit gemischten Streams

gulp.src(['./public/angular/**/*.js', './public/js/*.js']) 

nachfolgenden Code I unter Verwendung bin jetzt. Die Rohrleitungen und Verkettung arbeiten gut, aber die Reihenfolge folgende ist nicht die Spezifikation:

var gulp   = require('gulp'); 
var concat  = require('gulp-concat'); 
var notify  = require('gulp-notify'); 
var handleErrors = require('../util/handleErrors'); 
var jshint  = require('gulp-jshint'); 
var ngmin  = require('gulp-ngmin'); 
var order  = require('gulp-order'); 
var es   = require('event-stream'); 

function getStream(streamPath) { 
    return gulp.src(streamPath); 
}; 

gulp.task('scripts', function() { 
    return es.merge(getStream('./public/angular/**/*.js'),getStream('./public/js/*.js')) 
     .pipe(order([ 
      './public/angular/config/*.js', 
      './public/angular/services/**/*.js', 
      './public/angular/modules/**/*.js', 
      './public/angular/primitives/**/*.js', 
      './public/js/**/*.js' 
     ])) 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('./public/build/js')) 
     .on('error', handleErrors); 
}); 
+0

gleiche Problem und es war gestern zu arbeiten und jetzt ist es nicht. – Nick

+1

Hey @Nick Ich habe das Bestellmodul verschrottet und Streamqueue benutzt. Funktioniert gut, Sie können es auf meinem GitHub überprüfen https://github.com/dtothefp/gulp-angular-foundation/blob/master/gulp/tasks/scripts.js – dtothefp

+0

stellt sich heraus, ich bin ein Dummkopf, änderte ich die Dateinamen .. kein Wunder, dass sie außer Betrieb waren !!! BTW können Sie dies mit der Bestellung tun oder einfach gulp.src ([Datei1, Datei2, Datei3 *]) verwenden. Ich denke nicht, dass Streamqueue notwendig ist. – Nick

Antwort

12

ich das gleiche Problem hatte, und ich gulp-print die Dateinamen in meinem Stream zu sehen, aber sie waren in Ordnung. Ich fand heraus, dass ich die base Option zu gulp-order hinzufügen musste, dann funktionierte alles gut.

gulp.src(['myFiles/*', 'myOtherFiles/*']) 
    .pipe(order([ 
     'myOtherFiles/lib1.js', 
     'myFiles/lib2.js' 
    ], {base: '.'}); 

Hilfreiche Artikel: http://martinwolf.org/2014/08/12/force-a-concatenation-order-with-gulp-js/

UPDATE: neuen Link zum Blog-Artikel: https://martinwolf.org/blog/2014/08/force-a-concatenation-order-with-gulp-js

+0

Das hat es auch für mich behoben. Es erscheint seltsam, dass das Piping direkt von 'gulp.src' diese Basisoption erfordert. –

+0

Danke, es hilft :) – Amitesh