`gulp.src` vs `vinyl-source-stream`?
`gulp.src` vs `vinyl-source-stream`?
一直在浏览一些 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]
vinyl-source-stream
将可读流转换为乙烯基对象。
vinyl-buffer
将流式黑胶唱片转换为缓冲黑胶唱片。
乙烯基物体可以包裹 stream or a buffer,gulp.dest
两者都可以。但是,一些 gulp 插件不接受流式黑胶唱片。事实上,
streaming not supported
开始使用 gulp 时,错误很常见。例如,afaik,没有支持流式乙烯基的 nodejs 压缩器:您需要 gulp-buffer
才能使您当前的流与此类插件一起使用。
从 gulp.src
生成的乙烯基是缓冲区,但是从可读流(browserify.bundle()
returns 可读流)用 vinyl-source-stream
生成的乙烯基不是,所以 vinyl-buffer
需要使用几个插件,比如 uglify。
所以,您并不需要 vinyl-buffer
来让 只是 browserify 和 gulp 一起工作。这个非常简单的 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' 错误。
但是,您通常不需要 buffer() 和 gulp,因为 gulp.src
从头开始生成缓冲乙烯基:
gulp.task('gulp-uglify' , function(){
gulp.src('simple.js')
.pipe( uglify() ) //no need to buffer()
.pipe( gulp.dest('./scripts'));
});
一直在浏览一些 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]
vinyl-source-stream
将可读流转换为乙烯基对象。
vinyl-buffer
将流式黑胶唱片转换为缓冲黑胶唱片。
乙烯基物体可以包裹 stream or a buffer,gulp.dest
两者都可以。但是,一些 gulp 插件不接受流式黑胶唱片。事实上,
streaming not supported
开始使用 gulp 时,错误很常见。例如,afaik,没有支持流式乙烯基的 nodejs 压缩器:您需要 gulp-buffer
才能使您当前的流与此类插件一起使用。
从 gulp.src
生成的乙烯基是缓冲区,但是从可读流(browserify.bundle()
returns 可读流)用 vinyl-source-stream
生成的乙烯基不是,所以 vinyl-buffer
需要使用几个插件,比如 uglify。
所以,您并不需要 vinyl-buffer
来让 只是 browserify 和 gulp 一起工作。这个非常简单的 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' 错误。
但是,您通常不需要 buffer() 和 gulp,因为 gulp.src
从头开始生成缓冲乙烯基:
gulp.task('gulp-uglify' , function(){
gulp.src('simple.js')
.pipe( uglify() ) //no need to buffer()
.pipe( gulp.dest('./scripts'));
});