2014-12-24 10 views
7

Gulp'de, TypeScript'i derlemeye çalışıyorum, onu birleştirmeye çalışıyorum, sonra da require s işlemek için Browserify üzerinden çalıştırın (sonra üretim modunda sonra çirkin.).Browserify için giriş olarak bir akış nasıl kullanılır?

This sample code Ne yapmaya çalıştığımı bulduklarıma en yakın olanıdır, ancak aracı bir dosya kullanır. Mümkünse, ara dosya yükünü ortadan kaldırmak için işleri akışa almayı tercih ederim.

Browserify bir akış yayınladığından, bir tanesinin nasıl kabul edileceğini bilmesi gerektiği gibi görünüyor.

ilgili kodu:

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

sonucu: foobar.ts biridir ben birleştirme atladığınızda

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

, sonuç foobar.js yerine main.js haricinde aynı olan giriş dosyaları.

ikinci girişimi

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

Yeni hatası

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

dosyaların geri kalanını içeren bir bağımlılık grafiği kuracağına bir giriş dosyası var mı, ya da ayrı giriş dosyalarınız mı var? – JMM

+0

Aynı şeyi yapmaya çalışıyorum. Diske vurmamız gerekirse, Grunt arazisine geri döndük. Gulp tüm akarsularla ilgili. Bunun cevaplandığını görmek isterim. –

cevap

2

yukarıda haberi bağlantı anlamlara gelebilir seçenekleri için

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

Sen browserify için vinyl akışını geçemez. Yalnızca text veya buffer akışlarını kabul eder. Tek çözüm browserify kavrayabilir bir text akışa giriş vinyl akışını dönüştürmektir: Kaynak dosyalarında Yani

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

Çok teşekkür ederim! Bana iş haftasını kurtardın. – Rustam

1

browserify için, gulp-browserify azından bir yudum eklentisi bir göz atın.

Örnek:

+1

Ona bir baktım; gulp-browserify eski ve kara listeye alınmış. –

+0

@Qwertman - oh öyle mi? pardon, projemde kullanıyorum ve kara listeye aldığım hakkında hiçbir fikrim yok – elaijuh

+0

Evet, işte bulduğum tek şey budur (bu yüzden cevabınız doğru bir şekilde - onu tekrar yazacağım ama işaretlemeyeceğim). Daha fazla ayrıntıyı gözden geçirip eklediğiniz için teşekkür ederiz. Kara liste hakkında birçok kişi şikayet ediyor. Asıl sorun, karşılık olarak, bakıcının bakımını durdurmasıydı, bu nedenle şu anda Browserify'nin eski modülleriyle veya muhtemelen Düğümün kendisi ile uyumsuz hale gelecek olan eski bir versiyonuna sıkışmış durumdayız (ya da aşağıdakilerin benzerliğinden emin değilim: Ekosistem hakkında yeterince bilgim yok, bu yüzden en iyi ihtimalle bir tahmin. –

İlgili konular