Javascript 乙烯缓冲液和gulp在gulp中流线型化的目的是什么?
正如文档所说,它们都处理将非流插件转换为流插件的问题 我试图理解的是,如果我能在某些东西上使用Javascript 乙烯缓冲液和gulp在gulp中流线型化的目的是什么?,javascript,gulp,node.js-stream,Javascript,Gulp,Node.js Stream,正如文档所说,它们都处理将非流插件转换为流插件的问题 我试图理解的是,如果我能在某些东西上使用.pipe()方法,这不意味着它是一个流吗 如果是,我在这里转换成什么 例子: (发件人:) var browserify=require('browserify') var source=require('乙烯基源流') var buffer=require(‘乙烯基缓冲液’) var uglify=require('gulp-uglify') var size=require('gulp-size
.pipe()
方法,这不意味着它是一个流吗
如果是,我在这里转换成什么
例子: (发件人:)
var browserify=require('browserify')
var source=require('乙烯基源流')
var buffer=require(‘乙烯基缓冲液’)
var uglify=require('gulp-uglify')
var size=require('gulp-size')
var gulp=需要('gulp')
吞咽任务('build',function()){
var bundler=browserify('./index.js')
返回bundler.pipe()
.pipe(源('index.js'))
.pipe(缓冲区())//
如前所述,大多数插件都使用缓冲区(尽管其中一些插件还支持流)。示例包括gulp uglify和gulp traceur。您可以使用gulp buffer将其转换为缓冲区
通过
gulpuglify
不支持流,所以您应该将流转换为缓冲区(示例使用乙烯基缓冲区
)
gulp-streamify
可以包装旧插件以支持流(示例使用gulp-uglify
)
方法不同,但结果同样令人满意
我试图理解的是,我是否可以在上使用.pipe()方法
有些东西,这不意味着它是一条小溪吗
不,.pipe()也可以传递缓冲区。这篇博文对此进行了很好的解释:
一些gulp-*插件通过将缓冲的乙烯基文件作为对象来工作
输入。
但乙烯基源流会发出一个流乙烯基文件对象。
这就是乙烯缓冲液的作用。所以我们只需要转换它
通过使用乙烯基缓冲液来缓冲乙烯基,如下所示
一个半有用的例子是考虑用一桶水扑灭篝火。要扑灭篝火,你需要先把桶装满,然后再把它倒在火上,而不是往桶里滴几滴,然后随着时间的推移把很多小水滴倒在火上。这个比喻并没有抓住一切,而是抓住了一个大点子你需要一桶水才能把火扑灭
“uglify”插件的工作原理也是一样的。想象一下,你想要压缩一个巨大的JS文件/uglify
加载整个代码库需要一点时间&你肯定不想在每一行出现时尝试缩小它,对吧?想象一下你加载一行,缩小它,加载另一行,缩小它,等等——这将是一个混乱。你不能流式处理它(你需要一个完整的“桶”代码才能丑化它)要正确丑化该文件,您需要先加载所有代码,然后再尝试丑化它
由于Gulp是一个“流式”构建系统,除非您有某种机制将流转换为缓冲区(完成后会发出流),否则不能使用uglify。您提到的两种工具都可以实现这一点
以下是流程:
STREAM>(BUFFER)>{对整个“缓冲”文件执行一些工作}>STREAM>{其他吞咽工作等}
对于您的特定问题,您可以使用.pipe(),因为乙烯基缓冲区/gulp streamify有助于将流“转换”为缓冲区,然后再将缓冲区“转换”为流。它们是完成基本相同任务的不同方法
我试图理解的是,我是否可以在上使用.pipe()方法
有些东西,这不意味着它是一条小溪吗
是的!它是一条小溪。但它是一条小溪
它不是流式传输一系列字符,而是流式传输一系列对象,这些对象是您源文件
gulp流中的每个“数据”事件都会发出一个文件对象,如下所示:
{
cwd: '/', //<string>
base: '/test/', //<string>
path: '/test/file.js', //<string>
contents: contents //<string> | <Buffer> | <stream.Readable>
}
{
cwd:“/”//
基数:'/test/'//
路径:'/test/file.js'//
目录:目录/| |
}
因此插件是一个插件,它将文件内容从流。可读的
转换为缓冲区
您可以在源代码中看到这一点,它在源代码中保存原始内容流,并在源代码中分配一个缓冲区作为新文件内容
做同样的事情,在和
Uglify处理完文件内容后,将其作为缓冲区保留是可以的。内容作为缓冲区总是可以的,gulp在寻源时不会这样做,因为它太昂贵了
var source = require('vinyl-source-stream')
var streamify = require('gulp-streamify')
var browserify = require('browserify')
var uglify = require('gulp-uglify')
var gulp = require('gulp')
gulp.task('browserify', function() {
var bundleStream = browserify('index.js').bundle()
bundleStream
.pipe(source('index.js'))
.pipe(streamify(uglify())) // <----------- why?
.pipe(gulp.dest('./bundle.js'))
})
{
cwd: '/', //<string>
base: '/test/', //<string>
path: '/test/file.js', //<string>
contents: contents //<string> | <Buffer> | <stream.Readable>
}