2017-01-10 74 views
1

已經瀏覽了一些吞食文件。我忍不住注意到,對於某些gulp.src(...)正在被用來獲取文件的任務。但是,對於其他任務(如使用瀏覽器時)var source = require('vinyl-source-stream'); & .pipe(source('bundle.js'))被使用。`gulp.src` vs`vinyl-source-stream`?

我認爲vinyl-source-stream流類型是gulp用來獲取文件的東西,但由於browserify是直接使用的,我們需要將它的流類型轉換爲與gulp兼容的流類型。但是,如果真的如此......那麼buffer = require('vinyl-buffer'); & .pipe(buffer())的目的是什麼,因爲顯然buffer()是什麼轉換。

[參考:https://scotch.io/tutorials/getting-started-with-browserify]

回答

2
vinyl-source-stream

變換可讀流入乙烯基對象。

vinyl-buffer將流式乙烯基轉化爲乙烯基緩衝劑。

乙烯物體可以包裝stream or a buffer,並且gulp.dest接受兩者。然而,一些吞嚥插件不接受流乙烯基。當你開始大口的工作事實上,

流處理不支持

錯誤是很常見的。例如,afaik,沒有支持流乙烯的nodejs縮小器:您需要gulp-buffer,以使您的當前流可以使用這些插件。從gulp.src產生

乙烯基是緩衝液,但具有vinyl-source-stream生成乙烯基從可讀流(browserify.bundle()返回可讀流)都沒有,所以vinyl-buffer將需要使用幾個插件與該一樣醜化。

所以,你並不需要vinyl-buffer才能使只是 browserify和gulp一起工作。這很簡單,一飲而盡任務將正常工作:

gulp.task('browser' , function(){ 

    return browserify({ 
      debug: true, 
      entries : './browserify-script.js' 
     }) 
     .bundle() 
     .pipe(source('browserify-script.js')) 
     // .pipe(buffer()) //you don't need this, 
     //since gulp-dest accepts both streams and buffers 
     .pipe(gulp.dest('./scripts/')); 

}); 

然而,使用gulp-uglify插件,你將需要buffer

gulp.task('browser-ugly' , function(){ 
    return bundler = browserify({ 
      debug: true, 
      entries : './browserify-script.js' 
     }) 
     .bundle() 
     .pipe(source('origin.js')) 
     .pipe(buffer()) //you cannot get rid of this. 
     .pipe(uglify()) 
     .pipe(gulp.dest('./scripts/')); 
}); 

由於uglify()需要一個緩衝。刪除.pipe(buffer())行會導致uglify插件發生'streaming not supported'錯誤。

但是,你通常不需要緩衝()與一飲而盡,因爲gulp.src從一開始就產生緩衝乙烯基:

gulp.task('gulp-uglify' , function(){ 

    gulp.src('simple.js') 
    .pipe(uglify()) //no need to buffer() 
    .pipe(gulp.dest('./scripts')); 
}); 
相關問題