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中新增文件。