`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 buffergulp.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'));
});