很久以前,我们在"细说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
相关文章:
中山网站推广排名,中山信息港登录入口?
如何用wdcp快速搭建高效网站?
建站之星云端配置指南:模板选择与SEO优化一键生成
家庭服务器如何搭建个人网站?
*服务器网站为何频现安全漏洞?
如何用AWS免费套餐快速搭建高效网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何正确选择百度移动适配建站域名?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
网站制作的步骤包括,正确网址格式怎么写?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何快速生成专业多端适配建站电话?
如何通过wdcp面板快速创建网站?
建站之星如何修改网站生成路径?
,巨量百应是干嘛的?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
Thinkphp 中 distinct 的用法解析
,网页ppt怎么弄成自己的ppt?
建站DNS解析失败?如何正确配置域名服务器?
公司网站制作价格怎么算,公司办个官网需要多少钱?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
javascript中的try catch异常捕获机制用法分析
如何在阿里云虚拟服务器快速搭建网站?
清除minerd进程的简单方法
建站之星IIS配置教程:代码生成技巧与站点搭建指南
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何登录建站主机?访问步骤全解析
Android自定义控件实现温度旋转按钮效果
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何用y主机助手快速搭建网站?
建站主机选哪家性价比最高?
高防服务器租用如何选择配置与防御等级?
婚礼视频制作网站,学习*后期制作的网站有哪些?
建站之星后台管理系统如何操作?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何实现建站之星域名转发设置?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
郑州企业网站制作公司,郑州招聘网站有哪些?
免费网站制作appp,免费制作app哪个平台好?
如何在景安服务器上快速搭建个人网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
专业公司网站制作公司,用什么语言做企业网站比较好?
建站与域名管理如何高效结合?
简单实现Android文件上传
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何快速使用云服务器搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。