2014-12-24 9 views
7

In Gulp, sto cercando di compilare TypeScript, concatenarlo, quindi eseguirlo tramite Browserify per gestire lo require s (quindi ugolare dopo se in modalità produzione).Come utilizzare uno stream come input per Browserify?

This sample code è il più vicino che ho trovato a quello che sto cercando di fare, tuttavia utilizza un file intermedio. Preferisco piuttosto mantenere le cose nello stream per evitare il sovraccarico del file dell'intermediario, se possibile.

Poiché Browserify genera uno stream, sembra che debba sapere anche come accettarne uno.

Il codice rilevante:

var gulp = require('gulp'); 
var browserify = requ 
var concat = require('gulp-concat'); 
var sourcemaps = require('gulp-sourcemaps'); 
var transform = require('vinyl-transform'); 
var typeScript = require('gulp-typescript'); 

gulp.task('scripts', function() { 
    return gulp.src([mySrcDir,'typings/**/*.d.ts']) 
     .pipe(sourcemaps.init()) 
     .pipe(typeScript(typeScriptProject)) 
     .pipe(concat('main.js')) 
     .pipe(transform(function (filename) { 
      return browserify(filename).bundle(); 
     })) 
     .pipe(sourcemaps.write()) 
     .pipe(gulp.dest(ns.outDir)) 
     // Reload, notify... 
     ; 

Il risultato:

Error: Cannot find module 'C:\path\to\project\root\src\main.js' in 'C:\path\to\project\root'

Quando Tralascio concatenazione, il risultato è lo stesso, se non con foobar.js anziché main.js dove foobar.ts è uno dei file di input.

Un secondo tentativo

gulp.task('scripts', function() { 
    var stream = gulp.src([mySrcDir,'typings/**/*.d.ts']) 
     .pipe(sourcemaps.init()) 
     .pipe(typeScript(typeScriptProject)) 
     .pipe(concat('main.js')); 
    var bundleStream = ns.browserify(stream).bundle().on('error', errorHandler); 
    // and then... 

un nuovo errore

C:\path\to\project\root\_stream_0.js:1 
[object Object] 
     ^
ParseError: Unexpected token 
+0

Quindi, nei file di origine non si dispone di un file di voce che avrebbe costruito un grafico delle dipendenze che incorpora il resto dei file, o hai un sacco di file di ingresso separati? – JMM

+0

Sto provando a fare la stessa cosa. Se dobbiamo colpire il disco, siamo di nuovo in terra Grunt. Gulp è tutto sui flussi. Piacerebbe vedere questa risposta –

risposta

2

Non è possibile passare un flusso vinyl a browserify. Accetta solo stream text o buffer. L'unica soluzione è quella di trasformare il flusso di input vinyl in un flusso text che browserify può afferrare:

var gutil = require('gulp-util') 
var through = require('through2') 
var intoStream = require('into-stream') 

// ... 
.pipe(through.obj(function(file, encoding, next) { 
    bundle = browserify(intoStream(file.contents)) 
    this.push(new gutil.File({ 
    path: 'index.js', 
    contents: bundle.bundle() 
    })) 
    next() 
})) 
+0

Grazie mille! Mi hai salvato la settimana di lavoro. – Rustam

1

un'occhiata a gulp-browserify, è un plugin per il sorso browserify.

Esempio:

gulp.src([mySrcDir,'typings/**/*.d.ts']) 
    .pipe(sourcemaps.init()) 
    .pipe(typeScript(typeScriptProject)) 
    .pipe(concat('main.js')) 
    .pipe(browserify(options) 
    .pipe(sourcemaps.write()) 
    .pipe(gulp.dest(ns.outDir)) 
    // Reload, notify... 
    ; 

per le opzioni si può fare riferimento al link postato sopra

+1

L'ho dato un'occhiata; gulp-browserify è obsoleto e nella lista nera. –

+0

@Qwertman - oh è? scusa, l'ho usato nel mio progetto e non ho idea di che sia nella lista nera – elaijuh

+0

Sì, in questo momento è l'unica cosa che ho trovato di funzionare (quindi la tua risposta è in un certo senso - lo inviterò ma non lo contrassegnerò). Grazie per la revisione e l'aggiunta di ulteriori dettagli, anche. Ci sono molte persone che si lamentano della lista nera. Il problema principale è che in risposta, il maintainer ha smesso di funzionare, quindi per ora siamo bloccati con una versione obsoleta di Browserify che alla fine diventerà incompatibile con altri moduli o forse con il Node stesso (non sono fiducioso sulla probabilità di entrambi: Non ne so abbastanza sull'ecosistema, quindi è un'ipotesi al meglio). –

Problemi correlati