2017-01-10 78 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')); 
}); 
相关问题