2014-05-06 13 views
6

Używam modułu gulp-order wraz z modułem strumieni zdarzeń i gulp-concat do łączenia plików javascript w jeden plik dest. Wtyczka "gulp-order" świetnie się sprawdziła w innych projektach, w których chciałem połączyć pliki ze strumienia w odrębnej kolejności. Z jakiegoś powodu w tym projekcie nie działa on prawidłowo, a pliki w katalogu publicznym/kątowym/config są rozproszone wśród plików, które określam jako konkatenacje jako ostatnie w katalogu public/js. Myślę, że może to mieć coś wspólnego z określeniem źródeł zwielokrotnionych, tj. katalogi kątowe i js. Próbowałem łączenie strumieni z modułem zdarzeń strumieni bez powodzenia, podczas gdy po raz pierwszy zaczął ja określił wielu źródeł przez przekazywanie tablicy do funkcji gulp.srcModuł węzła rzędu porządkowego z połączonymi strumieniami

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

Poniżej znajduje się kod używam teraz. Rurociągi i konkatenacji pracują dobrze, ale tak nie jest zgodnie ze specyfikacją:

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

sam problem i to było wczoraj pracę i teraz nie jest. – Nick

+1

Hej @Nick Zrzuciłem moduł zamówień i zacząłem używać streamqueue. Działa świetnie, możesz to sprawdzić na moim github https://github.com/dtothefp/gulp-angular-foundation/blob/master/gulp/tasks/scripts.js – dtothefp

+0

Okazuje się, że jestem dummusem, zmieniłem nazwy plików .. nic dziwnego, że były nieczynne !!! BTW możesz to zrobić przy zamówieniu lub po prostu użyj gulp.src ([file1, file2, file3 *]). Nie sądzę, żeby streamqueue było konieczne. – Nick

Odpowiedz

12

miałem ten sam problem, a ja gulp-print zobaczyć nazwy plików w moim strumieniu, ale były one prawidłowe. Dowiedziałem się, że muszę dodać opcję base do gulp-order, a następnie wszystko działało dobrze.

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

Pomocny artykuł: http://martinwolf.org/2014/08/12/force-a-concatenation-order-with-gulp-js/

UPDATE: nowy link na blogu: https://martinwolf.org/blog/2014/08/force-a-concatenation-order-with-gulp-js

+0

Naprawiono to również dla mnie. Wydaje się dziwne, że instalacja bezpośrednio z 'gulp.src' wymagałaby tej opcji podstawowej. –

+0

Dziękuję za pomoc :) – Amitesh