2014-12-24 16 views
7

In Gulp, ich versuche, TypScript zu kompilieren, verketten es, dann führen Sie es durch Browserify, um die require s (dann nach dem Igl im Produktionsmodus).Wie verwende ich einen Stream als Eingabe für Browserify?

This sample code ist das nächste was ich gefunden habe, was ich versuche zu tun, aber es verwendet eine Zwischendatei. Ich würde lieber die Dinge im Stream behalten, um den Overhead der Zwischendatei möglichst zu vermeiden.

Da Browserify einen Stream ausgibt, scheint es, als ob er wissen sollte, wie man einen Stream akzeptiert.

Der entsprechende Code:

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... 
     ; 

Das Ergebnis:

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

Wenn ich Verkettung nicht angeben, wird das Ergebnis das gleiche, nur mit foobar.js statt main.js wo foobar.ts ist einer der Eingabedateien.

Ein zweiter Versuch

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... 

ein neuer Fehler

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

So in Ihren Quelldateien haben Sie eine Eintrag Datei, die eine Abhängigkeitsgraphen enthält den Rest der Dateien bauen würde, oder Haben Sie eine Reihe von separaten Eintragsdateien? – JMM

+0

Ich versuche das Gleiche zu tun. Wenn wir die Scheibe treffen müssen, sind wir zurück in Grunt Land. Gulp dreht sich alles um Ströme. Möchte sehen, dass dies beantwortet wird. –

Antwort

2

geschrieben beziehen Sie können keinen vinyl Stream browserify passieren. Es akzeptiert nur text oder buffer Streams. Die einzige Lösung ist, den Eingang vinyl Strom zu einem text Strom zu transformieren, dass browserify erfassen kann:

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

Vielen Dank! Du hast mir die Woche Arbeit gerettet. – Rustam

1

einen Blick auf gulp-browserify es einen Schluck Plugin für browserify.

Beispiel:

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... 
    ; 

für Optionen, die Sie auf den Link oben

+1

Ich habe es mir angesehen; gulp-browserify ist veraltet und auf der schwarzen Liste. –

+0

@Qwertman - oh ist es? Entschuldigung, ich benutze es in meinem Projekt und habe keine Ahnung, dass es auf der schwarzen Liste steht. – elaijuh

+0

Ja, im Moment ist es das Einzige, was ich gefunden habe (also ist deine Antwort richtig - ich werde es auffrischen, aber nicht markieren). Danke für die Überarbeitung und das Hinzufügen weiterer Details. Es gibt eine Menge Leute, die sich über die Blacklist beschweren. Das Hauptproblem ist, dass der Maintainer als Antwort darauf aufgehört hat, zu warten. Daher stecken wir jetzt mit einer alternden Version von Browserify fest, die irgendwann mit anderen Modulen oder möglicherweise Node selbst inkompatibel wird (ich bin nicht zuversichtlich, ob Ich weiß nicht genug über das Ökosystem, also ist es eine Vermutung am besten). –

Verwandte Themen