全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何编写javascript的gulp插件

很久以前,我们在"细说gulp"随笔中,以压缩JavaScript为例,详细地讲解了如何利用gulp来完成前端自动化。

再来短暂回顾下,当时除了借助gulp之外,我们还利用了第三方gulp插件”gulp-uglify”,来达到压缩JavaScript文件的目的。

代码如下:

今儿,我们的重点就是,自己也来实现一个gulp插件。

正文

其实,如果只是单纯地想要编写一个gulp插件不难,可以借助through2或者through-gulp来编写(through-gulp是基于through2开发的)。

例如,我们想要接下来即将编写的插件(暂取名为modify),实现这样的功能:将指定html文件中的{{…}},全部替换成'Monkey 2 Dorie'。

如下:

下面我们将利用through2以及through-gulp一一道来。

**through2**

'use strict'
var through2 = require('through2');
module.exports = modify;
function modify(){
 return through2.obj(function(file, encoding, cb){
 //如果文件为空,不做任何操作,转入下一个操作,即下一个pipe
 if(file.isNull()){
 console.log('isNull');
 this.push(file);
 return cb();
 }
 //插件不支持对stream直接操作,抛出异常
 if(file.isStream()){
 console.log('isStream');
 this.emit('error');
 return cb();
 }
 //内容转换,处理好后,再转成Buffer形式
 var content = versionFun(file.contents.toString());
 file.contents = new Buffer(content);
 //下面这两句基本是标配,可参考through2的API
 this.push(file);
 cb();
 });
}
function versionFun(data){
 return data.replace(/{{something}}/, ' Monkey 2 Dorie ');
}

**through-gulp**

'use strict'
var through = require('through-gulp');
module.exports = modify;
function modify(){
 var stream = through(function(file, encoding, callback){
 //如果文件为空,不做任何操作,转入下一个操作,即下一个pipe
 if(file.isNull()){
 console.log('file is null!');
 this.push(file);
 return callback(); 
 }
 //插件不支持对stream直接操作,抛出异常
 if(file.isStream()){
 console.log('file is stream!');
 this.emit('error');
 return callback(); 
 }
 //内容转换,处理好后,再转成Buffer形式
 var content = versionFun(file.contents.toString('utf-8'));
 file.contents = new Buffer(content, 'utf-8');
 this.push(file);
 callback();
 }, function(callback){
 console.log('处理完毕!');
 callback();
 });
 return stream;
}
function versionFun(data){
 return data.replace(/{{something}}/, ' Monkey 2 Dorie ');
}

详情代码见github.

拓展阅读

[1]、through-gulp

[2]、gulp规范

[3]、gulp高级技巧

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# gulp插件  # 详解前端构建工具gulpjs的使用介绍及技巧  # 在Mac OS上安装使用Node.js的项目自动化构建工具Gulp  # 基于gulp合并压缩Seajs模块的方式说明  # 基于Node.js的JavaScript项目构建工具gulp的使用教程  # JS中使用gulp实现压缩文件及浏览器热加载功能  # 不做  # 不支持  # 抛出  # 好后  # 转成  # 为空  # 再来  # 今儿  # 为例  # 两句  # 第三方  # 来完成  # 也来  # 很久以前  # 标配  # 道来  # 替换成  # 是基于  # Monkey  # Dorie 


相关文章: C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  建站主机服务器选型指南与性能优化方案解析  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  宝塔Windows建站如何避免显示默认IIS页面?  无锡营销型网站制作公司,无锡网选车牌流程?  黑客如何利用漏洞与弱口令入侵网站服务器?  临沂网站制作公司有哪些,临沂第四中学官网?  西安专业网站制作公司有哪些,陕西省建行官方网站?  简单实现Android验证码  建站之星如何保障用户数据免受黑客入侵?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  制作网站的公司有哪些,做一个公司网站要多少钱?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  在线制作视频的网站有哪些,电脑如何制作视频短片?  建站之星会员如何解锁更多建站功能?  定制建站哪家更专业可靠?推荐榜单揭晓  *服务器网站为何频现安全漏洞?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何快速登录WAP自助建站平台?  如何生成腾讯云建站专用兑换码?  如何在云主机上快速搭建多站点网站?  建站为何优先选择香港服务器?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  宝塔新建站点为何无法访问?如何排查?  如何选择高效响应式自助建站源码系统?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何通过西部建站助手安装IIS服务器?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  企业微网站怎么做,公司网站和公众号有什么区别?  建站主机是否属于云主机类型?  简历在线制作网站免费版,如何创建个人简历?  英语简历制作免费网站推荐,如何将简历翻译成英文?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何快速重置建站主机并恢复默认配置?  如何选择美橙互联多站合一建站方案?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站之星在线客服如何快速接入解答?  高防服务器:AI智能防御DDoS攻击与数据安全保障  宁波自助建站系统如何快速打造专业企业网站?  大型企业网站制作流程,做网站需要注册公司吗?  北京网站制作公司哪家好一点,北京租房网站有哪些?  南平网站制作公司,2025年南平市事业单位报名时间?  如何在IIS7中新建站点?详细步骤解析  如何快速打造个性化非模板自助建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。