`gulp.src`对`vinyl-source-stream`?

时间:2017-01-10 08:02:56

标签: gulp filestream

一直在浏览一些gulp文件。我忍不住注意到,有些任务gulp.src(...)被用来获取文件。但是,对于其他任务(例如使用browserify时)var source = require('vinyl-source-stream');& .pipe(source('bundle.js'))被使用了。

我认为vinyl-source-stream流类型是gulp用于获取文件的内容,但由于直接使用browserify,我们需要将其流类型转换为与gulp兼容的流类型。但是,如果确实如此......那么buffer = require('vinyl-buffer');&的目的是什么? .pipe(buffer())因为buffer()显然是转换。

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

1 个答案:

答案 0 :(得分:2)

vinyl-source-stream将可读流转换为乙烯基对象。

vinyl-buffer将流式乙烯基转换为缓冲乙烯基。

乙烯基对象可以包裹stream or a buffergulp.dest同时接受这两者。但是,几个gulp插件不接受流式乙烯基。事实上,一个

  

不支持流媒体

当你开始使用gulp时,

错误很常见。例如,afaik,没有支持流式乙烯基的nodejs minifiers:您需要gulp-buffer才能使当前流与此类插件一起使用。

gulp.src生成的乙烯基是缓冲区,但是来自可读流(vinyl-source-stream的{​​{1}}生成的乙烯基返回可读流)不是,因此browserify.bundle()将是需要使用几个插件,如uglify。

所以,你真的不需要vinyl-buffer只是浏览器和gulp一起工作。这个非常简单的gulp任务将正常工作:

vinyl-buffer

但是,要使用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()行会导致uglify插件出现“不支持流式传输”错误。

但是,您通常不需要使用gulp buffer(),因为.pipe( buffer() )从头开始生成缓冲区乙烯基:

gulp.src