用gulp-bufferify疾速建立你的gulp插件

gulp-bufferify是我之前写的一个gulp插件,实在它没有现实的功用性用途,然则应用它能够疾速完成一个gulp插件。举一个栗子:

import bufferify from 'gulp-bufferify'
gulp.src('./**/*.txt')
    .pipe(bufferify(content => content.replace(/sam/g, 'tom')))
    .pipe(gulp.dest('.'))

经由过程上面这段gulp代码,能够疾速替代一切txt文档中的sam为tom。能够说,每个gulp-bufferify就是一个插件,你能够应用它完成你想要的功用。

我们来看看他的运用方法:

let factory = (content, file, context, notifier) => {}
bufferify(factory)

工场函数factory有四个参数:

content

经由toString()的文档内容,平常在处置惩罚文本范例的文档时能够直接运用。

file

当前buffer的file,具有file.path, file.contents, file.clone()等有效的信息。

context

管道中的上下文,相当于stream中的this。能够经由过程它完成文件的增加修正和删除。详细的话,你还得晓得stream的相干学问。

notifier

用在异步处置惩罚中,关照生成器,运用方法以下:

.pipe(bufferify((content, file, context, notifier) => {
    let callback = notifier()
    setTimeout(() => callback(), 3000)
}))

上面这段代码是异步处置惩罚的,当callback()实行时,stream才会进入下一个管道。

工场函数的返回值应该是新的content,当你返回一个新的content的时刻,这个buffer的内容就会被新的content替代(buffer文件是文本文件)。

而如果你返回的值为非真时,原始的content将被运用。

不过当你运用notifier的时刻状况差别,实行notifier()就相当于通知gulp-bufferify,你的插件将会以异步体式格局运转,所以这个时刻你return的新的content将不会被采纳,晓得你运用callback()。callback的运用方法和though2的callback运用方法是一样的,如果你修正了buffer文件,必需采纳以下的情势:

.pipe(bufferify((content, file, context, notifier) => {
    let callback = notifier()
    let newcontent = content.replace('you', 'me')
    file.contents = new Buffer(newcontent)
    setTimeout(() => callback(null, file), 3000)
}))

在gulp-bufferify中,真正转变stream的,主如果bufferify函数的返回值和context,返回新的content将转变file.contents,而运用context则能够在stream中新增文件。

    原文作者:唐霜
    原文地址: https://segmentfault.com/a/1190000009041184
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞