2014-05-06 7 views
6

Sto usando il modulo gulp-order insieme al modulo event-stream e gulp-concat per concatenare i file javascript in un singolo file di destinazione. Il plugin gulp-order ha funzionato benissimo per me in altri progetti in cui volevo concatenare file dallo stream in un ordine distinto. Per qualche ragione in questo progetto non funziona correttamente, ei file nella directory public/angular/config sono dispersi tra i file che ho specificato di concatenare per ultimi nella directory public/js. Penso che questo possa avere qualcosa a che fare con la specificazione delle fonti moltiplicate, ad es. le directory angolari e js. Ho provato fusione dei corsi d'acqua con il modulo eventi-streams senza fortuna, mentre quando ho iniziato ho specificato le fonti multiple passando un array alla funzione gulp.srcmodulo nodo gulp-order con flussi uniti

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

Sotto è il codice che sto usando adesso. Le tubazioni e la concatenazione stanno lavorando bene, ma l'ordine non seguendo la specifica:

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

stesso problema e se fosse ieri di lavoro e ora non lo è. – Nick

+1

Ehi @Nick ho scartato il modulo d'ordine e ho iniziato ad usare streamqueue. Funziona alla grande, puoi verificarlo sul mio github https://github.com/dtothefp/gulp-angular-foundation/blob/master/gulp/tasks/scripts.js – dtothefp

+0

risulta che sono un dummus, ho cambiato i nomi dei file .. non c'è da stupirsi che fossero fuori uso !!! A proposito, puoi farlo con ordine o semplicemente usare gulp.src ([file1, file2, file3 *]). Non penso che lo streamqueue sia necessario. – Nick

risposta

12

Ho avuto questo stesso problema, e ho usato gulp-print a vedere i nomi dei file nel mio flusso, ma erano corrette. Ho scoperto che avevo bisogno di aggiungere l'opzione base a gulp-order, quindi tutto ha funzionato bene.

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

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

UPDATE: nuovo collegamento al Blog article: https://martinwolf.org/blog/2014/08/force-a-concatenation-order-with-gulp-js

+0

Questo lo ha risolto anche per me. Sembra strano che il piping diretto da 'gulp.src' richiederebbe questa opzione di base. –

+0

Grazie aiuto :) – Amitesh