如何編寫javascript的gulp插件
很久以前,我們在"細說gulp"隨筆中,以壓縮JavaScript為例,詳細地講解了如何利用gulp來完成前端自動化。
再來短暫回顧下,當時除了借助gulp之外,我們還利用了第三方gulp插件”gulp-uglify”,來達到壓縮JavaScript文件的目的。
代碼如下:

今兒,我們的重點就是,自己也來實現(xiàn)一個gulp插件。
正文
其實,如果只是單純地想要編寫一個gulp插件不難,可以借助through2或者through-gulp來編寫(through-gulp是基于through2開發(fā)的)。
例如,我們想要接下來即將編寫的插件(暫取名為modify),實現(xiàn)這樣的功能:將指定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規(guī)范
[3]、gulp高級技巧
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
SpringBoot中webSocket實現(xiàn)即時聊天
這篇文章主要介紹了SpringBoot中webSocket實現(xiàn)即時聊天,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
spring聲明式事務@Transactional底層工作原理
這篇文章主要為大家介紹分析spring聲明式事務@Transactional底層工作原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-02-02
深入淺出Java mvc_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了MVC的基礎知識,MVC是一個框架模式,它強制性的使應用程序的輸入、處理和輸出分開,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
SpringBoot啟動訪問localhost:8080報錯404的解決操作
這篇文章主要介紹了SpringBoot啟動訪問localhost:8080報錯404的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Java利用iTextPDF庫實現(xiàn)制作PDF表格模板并填充數(shù)據
這篇文章主要為大家詳細介紹了如何通過Java的iTextPDF庫制作一個PDF表格模板并填充數(shù)據,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起學習一下吧2023-12-12

