很久以前,我们以压缩的JavaScript为例,详细讲解了如何使用大口来完成前端自动化。
简单回顾一下,当时除了使用大口之外,我们还使用了第三方大口插件“大口-uglify”来压缩JavaScript文件。
代码如下:
今天,我们的重点是自己实现一个大口插件。
主体
其实写一个大口插件不难的话,可以借助through2或者through-大口来写(through-大口是基于through2开发的)。
比如我们希望接下来编写的插件(暂命名为modify)实现用‘Monkey 2 Dorie’替换指定html文件中所有{{…}}的功能。
如下所示:
接下来,我们将一起使用through2和through-大口。
**至2**
使用严格的“var through 2=require”(“through 2”);module.exports=modify函数modify(){通过2.obj(函数(file,encoding,CB)返回){//如果文件为空,什么也不做,转到下一个操作,也就是下一个pipe if (file。is null()){ console . log(' is null ');this.push(文件);返回CB();}//该插件不支持对流的直接操作,并且在(file . issstream()){ console . log(' issstream ')时引发异常;this.emit('错误');返回CB();}//内容转换,处理后转换为Buffer格式var content=versionfun(文件。contents . tostring());file.contents=新缓冲区(内容);//下面两句基本都是标准的。请参考API this.push(文件)第2页至第3页。CB();});}函数version fun(data){ return data . replace(/{ {某物}}/,' Monkey 2 Dorie ');} **一饮而尽* *
使用严格的“var through=require”(“through-大口”);module.exports=modify函数modify () {var stream=through(函数(文件、编码、回调){//如果文件为空,则不做任何操作,转到下一个操作,即下一个pipe if(文件。为null ()) {console.log('文件为null!' );this.push(文件);返回回调();}//该插件不支持对流的直接操作,如果(file.isstream ()) {console.log('文件是流!' );this.emit('错误');返回回调();}//内容转换,处理后转换为Buffer格式var content=versionfun(文件。contents . tostring(' utf-8 ');file.contents=new Buffer(内容,‘utf-8’);this.push(文件);回调();},函数(回调){console.log('处理已完成!' );回调();});回流;}函数version fun(data){ return data . replace(/{ {某物}}/,' Monkey 2 Dorie ');}详情请见github。
进一步阅读
[1]、一饮而尽
[2],大口规范
[3],一饮而尽的高级技能
以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持我们!