一直在浏览一些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]
答案 0 :(得分:2)
vinyl-source-stream
将可读流转换为乙烯基对象。
vinyl-buffer
将流式乙烯基转换为缓冲乙烯基。
乙烯基对象可以包裹stream or a buffer,gulp.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