很久以前,我们在"细说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小时内与您取得联系。