gulp使用方法詳解

介紹

基于流伙狐,強調(diào)開發(fā)流程
gulp.png
功能
  1. 把一個文件拷貝到另一個位置
  2. 把多個js或css文件合并成一個文件仗岖,以減少網(wǎng)絡(luò)請求數(shù)
  3. 對js文件和css文件進行壓縮合并 以減少網(wǎng)絡(luò)流量
  4. 把sess或less文件編譯成css
  5. 壓縮圖像文件圈盔,以減少網(wǎng)絡(luò)流量
  6. 創(chuàng)建一個可以實時刷新頁面內(nèi)容和本地服務(wù)器等等
安裝gulp
  1. 新建項目文件夾
  2. 進入文件夾 npm init初始化
  3. 完善package.json
  4. npm install gulp--save-dev在node module下安裝本地gulp(開發(fā)階段使用)
  5. 并配置到package.json文件里面
gulp命令行(感覺用處不大)
 --gulpfile手動指定一個gulpfile的路徑,這在你有很多個gulpfile的時候使用 這也會將cwd設(shè)置到該gulpfile所在目錄
eg:--gulpfile gulpfile1

--cwd dirpath手動指定cwd(當(dāng)前工作目錄)  定義gulpfile的查找位置,此外琅捏,所有的相應(yīng)的依賴(require)會從這里開始計算相對路徑
eg: gulp hello1 --cwd history

-T或--task會顯示所指定gulpfile的task依賴樹
-tasks-simple會以純文本的方式顯示所載入的gulpfile中task列表
gulp的工作方式

gulp的使用流程一般是:首先通過gulp.src()方法獲取到想要處理的文件流
然后把文件流通過pipe方法導(dǎo)入到gulp的插件中
最后把經(jīng)過插件處理后的流在通過pipe方法導(dǎo)入到gulp.dest()中
gulp.desk()方法則把流中的內(nèi)容寫入到文件中。

例如
    var gulp=require('gulp');
    gulp.src('script/src.js')//獲取文件的流的api
            .pipe(gulp.dest)//寫文件的api
gulp.src()入口文件路徑

gulp.src(globs,[,options]);

參數(shù)

  • globs參數(shù)是文件匹配模式(類似正則表達式)递雀,用來匹配文件路徑(包括文件名)柄延,當(dāng)然這里也可以直接指定某個具體的文件路徑。當(dāng)有多個匹配模式時缀程,該參數(shù)可以為一個數(shù)組
  • options為可選參數(shù)拦焚。通常情況下我們不需要用到
  • {base:***}//基準路徑 默認值為通配符開始出現(xiàn)之那部分路徑
    目標路徑怎么決定
  • dist路徑加上原始路徑減去base路徑

globs語法

匹配符                             說明
      *                               匹配文件路徑中的0個或多個字符,但不會匹配路徑分割符杠输,
                                      除非分隔符出現(xiàn)在末尾

      **                              匹配路徑的0個會多個目錄 及子目錄 需要單獨出現(xiàn)赎败,
                                      即他左右不能有其他的東西了如果出現(xiàn)在末尾,也能匹配文件

      蠢甲?                              匹配文件路徑中的一個字符(不能匹配路徑分割符/)

      [...]                           匹配方括號中 出現(xiàn)字符的任意一個僵刮,當(dāng)方括號中第一個字符為^或!時,
                                      則表示不匹配方括號中出現(xiàn)字符中的任意一個鹦牛,
                                      類似于js中正則表達式中的用法

      !(pattern|pattern|pattern)      匹配任何與括號中給定的任意模式都不匹配
      搞糕?(pattern|pattern|pattern)     匹配括號中給定的任意模式0次或1次
      +(pattern|pattern|pattern)      匹配括號中的至少一次
      *(pattern|pattern|pattern)      匹配括號中給定的任意模式0次或多次
      @(pattern|pattern|pattern)      匹配括號中 給定的任意模式一次

    eg:glob 匹配
      |能匹配 a.js,x.y,abc,abc/,但不能匹配a/b.js|
      |.*   a.js,style.css,a.b,x.y
      //*.js    能匹配 a/b/c.js,x/y/z.js,不能匹配a/b.js,a/b/c/d.js
      **    能匹配 abc,a/b.js,a/b/c.js,x/y/z,x/y/z/a.b,能用來匹配所有的目錄和文件
      a/**/z    能匹配 a/z,a/b/z,a/b/c/z,a/d/g/h/j/k/z
      a/**b/z   能匹配 a/b/z,a/sb/z,但不能匹配a/x/sb/z,因為只有單**單獨出現(xiàn)才能匹配多級目錄
      ?.js  能匹配 a.js,b.js,c.js
      a??   能匹配 a.b,abc,但不能匹配ab/,因為它不會匹配路徑分隔符
      [xyz].js  只能匹配 x.js,y.js,z.js,不會匹配xy.js,xyz.js等,整個中括號只代表一個字符
      [^xyz].js 能匹配 a.js,b.js,c.js等,不能匹配x.js,y.js,z.js
gulp.dest(); 用來寫入文件的,
 gulp.dest(path,[,options]);
    //path為文件路徑
    //options為一個 可選對象曼追,通常不需要用到
gulp.watch()

用來監(jiān)視文件的變化窍仰,當(dāng)文件發(fā)生變化后,我們可以利用它來執(zhí)行相應(yīng)的任務(wù)礼殊,例如文件壓縮等驹吮。

    gulp.watch(globs[,opts],tasks);
    //glob為要見識的文件匹配模式 ,規(guī)則和用法與gulp.src方法中的glob相同
    //opts為一個可配置對象 通常不需要用到
    //tasks為文件變化后要執(zhí)行的任務(wù)晶伦,為一個數(shù)組

插件

package.png
使用插件
npm install XX --save-dev 安裝插件到當(dāng)前的項目dev
在gulpfile.js頂部引入此插件
在創(chuàng)建任務(wù)的時候使用此插件
gulp-load-plugins這個插件會自動幫你加載package.json文件里的gulp插件
  • 編譯Sass: gulp-sass
gulp.task('default',function(){//js文件合并
   gulp.src('app/sass/!*.sass').pipe($.sass()).pipe(gulp.dest('dist/css'));
})
  • 編譯less: gulp-less
gulp.task('default',function(){//js文件合并
   gulp.src('app/less/!*.less').pipe($.less()).pipe(gulp.dest('dist/css'));
})
  • 合并文件: gulp-concat
gulp.task('default',function(){
    gulp.src('app/!*.js').pipe($.concat('all.js')).pipe(gulp.dest('dist'));
})
  • 壓縮js文件: gulp-uglify
gulp.task('default',function(){
   gulp.src(['app/js/*.js']).pipe($.uglify()).pipe(gulp.dest('dist/js'))錄下
})
  • 重命名js文件: gulp-rename
gulp.task('default',function(){
   gulp.src(['app/js/*.js']).pipe($.rename('app.min.js')).pipe(gulp.dest('dist/js'))
})
  • 優(yōu)化圖像大兄勐健: gulp-imagemin
gulp.task('default',function(){
   gulp.src('app/images/*.{jpg,png,JPG,PNG}').pipe($.imagemin()).pipe(gulp.dest('dist/images'))
})
  • 壓縮css文件: gulp-minify-css
gulp.task('default',function(){
   gulp.src'app/css/*.css').pipe($.minifyCss()).pipe(gulp.dest('dist/css'))
})
  • 創(chuàng)建本地服務(wù)器: gulp-connect
gulp.task('server',function(){
    $.connect.server({
        root:'dist',//服務(wù)器的根目錄
        port:8080, //服務(wù)器的地址桥胞,沒有此配置項默認也是 8080
        livereload:true//啟用實時刷新的功能
    });
});
  • 實時預(yù)覽: gulp-connect
gulp.task('copy-html',function(){
    gulp.src('app/index.html')//指定源文件
        .pipe(gulp.dest('dist'))//拷貝到dist目錄
        .pipe($.connect.reload());//通知瀏覽器重啟
});
代碼檢查 jshint
gulp.task('jsLint', function () {
    gulp.src('app/!*.js')
        .pipe(jshint()) //進行代碼檢查
        .pipe(jshint.reporter()); // 輸出檢查結(jié)果
});

gulpfile.js配置文件

目錄結(jié)構(gòu).png

可用于一般文件壓縮

var gulp=require('gulp');
var $=require('gulp-load-plugins')();   

gulp.task('uglify',function(){
 return gulp.src(['app/js/*.js'])
 .pipe($.uglify())//壓縮app.js
 //.pipe($.rename('app.min.js'))
 .pipe(gulp.dest('dist/js'))//復(fù)制到dist/js目錄下
 })
//壓縮css,編譯less
gulp.task('minify',function(){
 return gulp.src(['app/css/*.less'])//指定 less文件
 .pipe($.less())//把less編譯成css
 //.pipe(gulp.dest('dist/css'))//輸出到目的地
 .pipe($.minifyCss())//對 css再進行壓縮
 .pipe($.rename({suffix:'.min'}))//重命名 可以用函數(shù)自定義新名字
 .pipe(gulp.dest('dist/css'));//輸出到目的地

 });
//單獨編譯css
gulp.task('minifycss',function(){
    return gulp.src(['app/css/*.css'])//指定 less文件
        .pipe($.minifyCss())//對 css再進行壓縮
        .pipe($.rename({suffix:'.min'}))//重命名 可以用函數(shù)自定義新名字
        .pipe(gulp.dest('dist/css'));//輸出到目的地

});
//壓縮圖片
gulp.task('copy-images',function(){
 return gulp.src('app/images/*.{jpg,png,JPG,PNG}')//指定要壓縮的圖片
 .pipe($.imagemin()) //進行圖片壓縮
 .pipe(gulp.dest('dist/images'));//輸出目的地
 });
gulp.task('html-min', function () {
    var options = {
        removeComments: true,//清除HTML注釋
        collapseWhitespace: true,//壓縮HTML
        //collapseBooleanAttributes: true,//省略布爾屬性的值 <input checked="true"/> ==> <input />
        //removeEmptyAttributes: true,//刪除所有空格作屬性值 <input id="" /> ==> <input />
        //removeScriptTypeAttributes: true,//刪除<script>的type="text/javascript"
        //removeStyleLinkTypeAttributes: true,//刪除<style>和<link>的type="text/css"
        //minifyJS: true,//壓縮頁面JS
        //minifyCSS: true//壓縮頁面CSS
    };
    return gulp.src('app/html/*.html')
        .pipe($.htmlmin(options))
        .pipe(gulp.dest('dist/html'));
});
//代碼檢查
gulp.task('jsLint', function () {
 return gulp.src('app/*.js')
 .pipe($.jshint()) //進行代碼檢查
 .pipe($.jshint.reporter()); // 輸出檢查結(jié)果
 });

gulp.task('con',['copy-images','uglify','html-min','jsLint','minifycss','minify']);
//實時監(jiān)聽
gulp.task('default',function(){
    gulp.watch('app/*/**.*',['con']);//當(dāng)index.html文件變化時執(zhí)行copy-html任務(wù) 實現(xiàn)頁面實時刷新
});
//右鍵運行run即可實現(xiàn)壓縮功能
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昙沦,更是在濱河造成了極大的恐慌绍填,老刑警劉巖歌逢,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件签杈,死亡現(xiàn)場離奇詭異,居然都是意外死亡沽一,警方通過查閱死者的電腦和手機盖溺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锯玛,“玉大人咐柜,你說我怎么就攤上這事兼蜈。” “怎么了拙友?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵为狸,是天一觀的道長。 經(jīng)常有香客問我遗契,道長辐棒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任牍蜂,我火速辦了婚禮漾根,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲫竞。我一直安慰自己辐怕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布从绘。 她就那樣靜靜地躺著寄疏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僵井。 梳的紋絲不亂的頭發(fā)上陕截,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音批什,去河邊找鬼农曲。 笑死,一個胖子當(dāng)著我的面吹牛驻债,可吹牛的內(nèi)容都是我干的乳规。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼却汉,長吁一口氣:“原來是場噩夢啊……” “哼驯妄!你這毒婦竟也來了荷并?” 一聲冷哼從身側(cè)響起合砂,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎源织,沒想到半個月后翩伪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡谈息,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年缘屹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侠仇。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡轻姿,死狀恐怖犁珠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情互亮,我是刑警寧澤犁享,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站豹休,受9級特大地震影響炊昆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜威根,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一凤巨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洛搀,春花似錦敢茁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至独榴,卻和暖如春僧叉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棺榔。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工瓶堕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人症歇。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓郎笆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忘晤。 傳聞我的和親對象是個殘疾皇子宛蚓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

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

  • gulpjs是一個前端構(gòu)建工具,與gruntjs相比设塔,gulpjs無需寫一大堆繁雜的配置參數(shù)凄吏,API也非常簡單,學(xué)...
    小裁縫sun閱讀 928評論 0 3
  • gulpjs是一個前端構(gòu)建工具闰蛔,與gruntjs相比痕钢,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單序六,學(xué)...
    井皮皮閱讀 1,298評論 0 10
  • gulpjs是一個前端構(gòu)建工具任连,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)例诀,API也非常簡單随抠,學(xué)...
    build1024閱讀 529評論 0 0
  • gulpjs是一個前端構(gòu)建工具裁着,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)拱她,API也非常簡單跨算,學(xué)...
    依依玖玥閱讀 3,155評論 7 55
  • Sass&Gulp 一、sass介紹 (一) SASS是一種CSS的開發(fā)工具椭懊,提供了許多便利的寫法诸蚕,大大節(jié)省了設(shè)計...
    鋒享前端閱讀 1,505評論 0 3