如何编写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门面模式与底层机制

