基于gulp的前端自動(dòng)化學(xué)習(xí)記錄

寫在前面

個(gè)人學(xué)習(xí)記錄竹捉,配置有可能有打錯(cuò)的地方筷屡,還請(qǐng)不吝賜教涧偷。

安裝gulp

首先全局安裝:

    $npm install gulp -g

在指定的目錄下安裝gulp并存為開發(fā)依賴

    $npm install gulp --save-dev

插播一段說明:--save 與--save-dev

--save是存為運(yùn)行依賴(啟動(dòng)應(yīng)用所必須)

--save-dev是存為開發(fā)依賴(修改源碼所必須)

gulp初始化

在目錄中創(chuàng)建一個(gè)gulpfile.js的文件保存gulp的配置
配置說明:

   var gulp=require('gulp') //獲取gulp模塊
   
   gulp.task('default',function(){
        //something
    });
    //配置默認(rèn)事件

有關(guān)gulp事件的說明

    gulp.src('src/**/*.js') 
    //選擇當(dāng)前src目錄中(包括子文件夾)所有的js文件
    ('src/*.js')這種不包括子文件夾
    .pipe(some require) //用某模塊來處理這些文件
    .pipe(gulp.dest('publice/js'))//輸出處理后的文件 
    gulp.watch('src/*.js',['//some task'])//watch監(jiān)視指定目錄,若發(fā)生改變調(diào)用task 常用于自動(dòng)編譯或者刷新

gulp也可以配置異步調(diào)用毙死,或者聲明promise對(duì)象不過個(gè)人感覺一般用不到燎潮,如有需求可以查看文檔:gulp中文api


gulp配置示例

首先是一個(gè)也許會(huì)常用的基于gulp的插件名稱和說明

  • 自動(dòng)加上 css3 前綴LessPluginAutoPrefix = require("less-plugin-autoprefix")
    應(yīng)該有g(shù)ulp 版本
  • Browsersync 同時(shí)進(jìn)行瀏覽器顯示效果的測試工具
  • gulp-concat js文件拼接 npm install gulp-concat --save-dev
  • gulp-uglify js文件壓縮 npm install gulp-uglify --save-dev
  • gulp-clean-css css文件壓縮 npm install gulp-clean-css --save-dev
  • gulp-changed 只編譯修過過的文件 npm install gulp-changed --save-dev
  • gulp-babel es6轉(zhuǎn)es5 react jsx 轉(zhuǎn)換 npm install gulp-babel babel-preset-es2015 --save-dev
  • gulp-plumber 錯(cuò)誤詳細(xì)信息 npm install gulp-plumber --save-dev
  • gulp-util 雜用組件庫 npm install gulp-util --save-dev
  • gulp-sourcemaps 生成依賴地圖 用來編譯復(fù)雜的相互引用的less(比如bootstrap),js(比如各種node模塊)等文件) npm install gulp-sourcemaps --save-dev

配置Less編譯和壓縮

Less編譯
安裝 gulp-less

$ npm install gulp-less --save-dev

配置less自動(dòng)編譯

    var gulp=require('gulp');
    var less=require('gulp-less');
    gulp.task('less',function(){
        return gulp.src('less/*.less')
            .pipe(less())  //READE.ME文件中有例子扼倘,但其中的依賴項(xiàng)我暫時(shí)不知道干嘛的
            .pipe(gulp.dest('publice/css/'));
        });
    gulp.task('lessWatch',function(){
             gulp.watch('less/*.less',['less']);// 當(dāng)less目錄下的文件發(fā)生變化時(shí)運(yùn)行l(wèi)ess編譯方法(注意不支持創(chuàng)建)
        });
   
    gulp.task('default',['lessWatch'])//默認(rèn)啟動(dòng)less監(jiān)視事件

以上就是最簡單的基于gulp-less的less自動(dòng)編譯配置
下面我們來看看編譯的同時(shí)壓縮
基于gulp-clean-css
安裝gulp-clean-css

$ npm install gulp-clean-css

在上面的配置文件基礎(chǔ)上加入gulp-clean-css
單獨(dú)使用可以參考READEME文檔

    var gulp=require('gulp');
    var less=require('gulp-less');
    var cleanCSS=require('gulp-clean-css');
    gulp.task('less',function(){
        return gulp.src('Less/*.less')
            .pipe(less())  //READE.ME文件中有例子跟啤,但其中的依賴項(xiàng)我暫時(shí)不知道干嘛的
            .pipe(cleanCSS()) //添加這句話
            .pipe(gulp.dest('Publice/css/'));
        });
    gulp.task('lessWatch',function(){
             gulp.watch('Less/*.less',['less']);// 當(dāng)less目錄下的文件發(fā)生變化時(shí)運(yùn)行l(wèi)ess編譯方法(注意不支持創(chuàng)建)
        });
   
    gulp.task('default',['lessWatch'])//默認(rèn)啟動(dòng)less監(jiān)視事件

gulp基本配置如此
下面附上一個(gè)可以編譯復(fù)雜引用的less,同時(shí)報(bào)錯(cuò)可以輸出錯(cuò)誤信息的gulp配置示例

var gulp = require('gulp');
var less = require('gulp-less');
var cleanCSS = require('gulp-clean-css'); //需要先確保安裝gulp-minify-css
var sourcemaps = require('gulp-sourcemaps'); //生成依賴地圖
var plumber = require('gulp-plumber'); //錯(cuò)誤管理
var gutil = require('gulp-util'); //實(shí)際的提醒
function errHandler( e ){
    gutil.log(e.toString());
} //創(chuàng)建一個(gè)顯示錯(cuò)誤信息的函數(shù)

gulp.task('less', function() {
     gulp.src('Less/*.less')
        .pipe(sourcemaps.init({loadMaps: true}))
            .pipe(plumber( {errorHandler: errHandler}))
            .pipe(less())
            .pipe(cleanCSS()) //鏈?zhǔn)讲僮?先編譯再壓縮
        .pipe(sourcemaps.write('mpas'))
        .pipe(gulp.dest('Publice/css'));
});
gulp.task('watch',function(){
    gulp.watch('Less/*.less', ['less']);
});
gulp.task('default', ['watch']);

ES6轉(zhuǎn)ES5并壓縮混淆的配置

原理和邏輯與LESS并無太大不同
首先是安裝

$ npm install gulp-babel babel-preset-es2015 --save-dev 

然后是配置

var gulp = require('gulp');
var sourcemaps = require('gulp-sourcemaps'); //生成依賴地圖
var plumber = require('gulp-plumber'); //錯(cuò)誤管理
var gutil = require('gulp-util'); //實(shí)際的提醒
var babel=require('gulp-babel'); //es6轉(zhuǎn)es5
var uglify = require('gulp-uglify'); //js壓縮

function errHandler( e ){
    gutil.log(e.toString());
} //錯(cuò)誤提示函數(shù)

gulp.task('es5change',function(){
    gulp.src('es6/*.js')
        .pipe(sourcemaps.init({loadMaps:true}))
            .pipe(plumber({errorHandler:errHandler}))
            .pipe(babel({
            presets: ['es2015']
            }))
            .pipe(uglify())
        .pipe(sourcemaps.write('maps'))
        .pipe(gulp.dest('Publice/js'));
});

gulp.task('watch',function(){
    gulp.watch('es6/*.js', ['es5change']);
});

gulp.task('default', ['watch']);

最后附上Less和ES6轉(zhuǎn)ES5的完整配置項(xiàng)

var gulp = require('gulp');
var less = require('gulp-less');
var cleanCSS = require('gulp-clean-css'); //需要先確保安裝gulp-minify-css
var sourcemaps = require('gulp-sourcemaps'); //生成依賴地圖
var plumber = require('gulp-plumber'); //錯(cuò)誤管理
var gutil = require('gulp-util'); //實(shí)際的提醒
var babel=require('gulp-babel'); //es6轉(zhuǎn)es5
var uglify = require('gulp-uglify'); //js壓縮

function errHandler( e ){
    gutil.log(e.toString());
}

gulp.task('es5change',function(){
    gulp.src('es6/*.js')
        .pipe(sourcemaps.init({loadMaps:true}))
            .pipe(plumber({errorHandler:errHandler}))
            .pipe(babel({
            presets: ['es2015']
            }))
            .pipe(uglify())
        .pipe(sourcemaps.write('maps'))
        .pipe(gulp.dest('Publice/js'));
});

gulp.task('less', function() {
    "use strict";
     gulp.src('Less/*.less')
        .pipe(sourcemaps.init({loadMaps: true}))
            .pipe(plumber( {errorHandler: errHandler}))
            .pipe(less())
            .pipe(cleanCSS()) //鏈?zhǔn)讲僮?先編譯再壓縮
        .pipe(sourcemaps.write('mpas'))
        .pipe(gulp.dest('Publice/css'));
});

gulp.task('watch',function(){
    gulp.watch('Less/*.less', ['less']);
    gulp.watch('es6/*.js', ['es5change']);
});


gulp.task('default', ['watch']);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唉锌,一起剝皮案震驚了整個(gè)濱河市隅肥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袄简,老刑警劉巖腥放,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绿语,居然都是意外死亡秃症,警方通過查閱死者的電腦和手機(jī)候址,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來种柑,“玉大人岗仑,你說我怎么就攤上這事【矍耄” “怎么了荠雕?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驶赏。 經(jīng)常有香客問我炸卑,道長,這世上最難降的妖魔是什么煤傍? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任盖文,我火速辦了婚禮,結(jié)果婚禮上蚯姆,老公的妹妹穿的比我還像新娘五续。我一直安慰自己,他們只是感情好龄恋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布返帕。 她就那樣靜靜地躺著,像睡著了一般篙挽。 火紅的嫁衣襯著肌膚如雪荆萤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天铣卡,我揣著相機(jī)與錄音链韭,去河邊找鬼。 笑死煮落,一個(gè)胖子當(dāng)著我的面吹牛敞峭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝉仇,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼旋讹,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了轿衔?” 一聲冷哼從身側(cè)響起沉迹,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎害驹,沒想到半個(gè)月后鞭呕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宛官,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年葫松,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓦糕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腋么,死狀恐怖咕娄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情珊擂,我是刑警寧澤圣勒,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站未玻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胡控。R本人自食惡果不足惜扳剿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昼激。 院中可真熱鬧庇绽,春花似錦、人聲如沸橙困。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凡傅。三九已至辟狈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夏跷,已是汗流浹背哼转。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槽华,地道東北人壹蔓。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像猫态,于是被迫代替她去往敵國和親佣蓉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容