很久以前,我们在"细说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
相关文章:
,柠檬视频怎样兑换vip?
c++ stringstream用法详解_c++字符串与数字转换利器
动图在线制作网站有哪些,滑动动图图集怎么做?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
网站制作模板下载什么软件,ppt模板免费下载网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
C#如何使用XPathNavigator高效查询XML
如何用腾讯建站主机快速创建免费网站?
建站之星导航菜单设置与功能模块配置全攻略
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站之星会员如何解锁更多建站功能?
教学网站制作软件,学习*后期制作的网站有哪些?
如何用AWS免费套餐快速搭建高效网站?
建站主机类型有哪些?如何正确选型
建站之星收费标准详解:套餐费用及年费价格表一览
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何通过FTP空间快速搭建安全高效网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
潮流网站制作头像软件下载,适合母子的网名有哪些?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
网站微信制作软件,如何制作微信链接?
中山网站制作网页,中山新生登记系统登记流程?
如何在阿里云ECS服务器部署织梦CMS网站?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
如何设计高效校园网站?
建站之星展会模版如何一键下载生成?
网站网页制作专业公司,怎样制作自己的网页?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
制作网站公司那家好,网络公司是做什么的?
建站VPS推荐:2025年高性能服务器配置指南
如何高效搭建专业期货交易平台网站?
如何配置FTP站点权限与安全设置?
网站制作企业,网站的banner和导航栏是指什么?
如何在云主机上快速搭建网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
如何零基础开发自助建站系统?完整教程解析
,在苏州找工作,上哪个网站比较好?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何彻底删除建站之星生成的Banner?
如何挑选高效建站主机与优质域名?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
如何设置并定期更换建站之星安全管理员密码?
*请认真填写需求信息,我们会在24小时内与您取得联系。