如何编写javascript的gulp插件

发布时间 - 2026-01-10 22:53:35    点击率:

很久以前,我们在"细说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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  无锡营销型网站制作公司,无锡网选车牌流程?  java ZXing生成二维码及条码实例分享  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Android实现代码画虚线边框背景效果  网易LOFTER官网链接 老福特网页版登录地址  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何快速打造个性化非模板自助建站?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  打造顶配客厅影院,这份100寸电视推荐名单请查收  在Oracle关闭情况下如何修改spfile的参数  如何快速上传自定义模板至建站之星?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何在服务器上配置二级域名建站?  如何打造高效商业网站?建站目的决定转化率  昵图网官网入口 昵图网素材平台官方入口  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  微信小程序 闭包写法详细介绍  如何为不同团队 ID 动态生成多个“认领值班”按钮  Java类加载基本过程详细介绍  如何在阿里云服务器自主搭建网站?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何在搬瓦工VPS快速搭建网站?  Linux安全能力提升路径_长期防护思维说明【指导】  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何获取PHP WAP自助建站系统源码?  Android okhttputils现在进度显示实例代码  如何生成腾讯云建站专用兑换码?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  如何在建站主机中优化服务器配置?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  PythonWeb开发入门教程_Flask快速构建Web应用  jQuery 常见小例汇总  如何在云虚拟主机上快速搭建个人网站?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制