如何使用GULP?

1.背景介紹

gulp是前端開發(fā)過程中對代碼進(jìn)行構(gòu)建的工具打瘪,是自動化項目的構(gòu)建利器;它不僅能對網(wǎng)站資源進(jìn)行優(yōu)化揍障,而且在開發(fā)過程中很多重復(fù)的任務(wù)能夠使用正確的工具自動完成啤月;使用它,我們不僅可以很愉快的編寫代碼嫉髓,而且大大提高我們的工作效率观腊。

gulp是基于Nodejs的自動任務(wù)運行器,它能自動化地完成javascript/coffee/sass/less/html/image/css等文件的的測試算行、檢查梧油、合并、壓縮州邢、格式化儡陨、瀏覽器自動刷新、部署文件生成量淌,并監(jiān)聽文件在改動后重復(fù)指定的這些步驟骗村。在實現(xiàn)上,它借鑒了Unix操作系統(tǒng)的管道(pipe)思想呀枢,前一級的輸出胚股,直接變成后一級的輸入,使得在操作上非常簡單裙秋。

2.知識剖析

1琅拌、如何安裝gulp:

首先安裝nodejs,通過nodejs的npm全局安裝和項目安裝gulp残吩,其次在項目里安裝所需要的gulp插件财忽,然后新建gulp的配置文件gulpfile.js并寫好配置信息(定義gulp任務(wù)),最后通過命令提示符運行g(shù)ulp任務(wù)即可泣侮。

2即彪、步驟如下:

安裝nodejs ->全局安裝gulp ->項目安裝gulp以及gulp插件->配置gulpfile.js ->運行任務(wù)

3、gulp在使用過程中常用命令:

node -v查看安裝的nodejs版本,出現(xiàn)版本號隶校,說明剛剛已正確安裝nodejs漏益。

npm -v查看npm的版本號,npm是在安裝nodejs時一同安裝的nodejs包管理器深胳。

cd定位到目錄绰疤,用法:cd +路徑;

dir列出文件列表舞终;

cls清空命令提示符窗口內(nèi)容轻庆。

4、npm

npm(node package manager)nodejs的包管理器敛劝,用于node插件管理(包括安裝余爆、卸載、更新夸盟、管理依賴等)

4.2蛾方、使用npm安裝插件:命令提示符執(zhí)行npm install

[-g] [--save-dev];

4.2.1上陕、:node插件名稱桩砰。例:npm install gulp-less--save-dev

4.2.2、-g:全局安裝释簿。將會安裝在C:\Users\Administrator\AppData\Roaming\npm亚隅,并且寫入系統(tǒng)環(huán)境變量;非全局安裝:將會安裝在當(dāng)前定位目錄辕万;全局安裝可以通過命令行在任何地方調(diào)用它枢步,本地安裝將安裝在定位目錄的node_modules文件夾下沉删,通過require()調(diào)用渐尿;

4.2.3、--save:將保存配置信息至package.json(package.json是nodejs項目配置文件)矾瑰;

4.2.4砖茸、-dev:保存至package.json的devDependencies節(jié)點,不指定-dev將保存至dependencies節(jié)點殴穴;一般保存在dependencies的像這些express/ejs/body-parser等等凉夯。

4.2.5、為什么要保存至package.json采幌?因為node插件包相對來說非常龐大劲够,所以不加入版本管理,將配置信息寫入package.json并將其加入版本管理休傍,其他開發(fā)者對應(yīng)下載即可(命令提示符執(zhí)行npm install征绎,則會根據(jù)package.json下載所有需要的包,npm install --production只下載dependencies節(jié)點的包)磨取。

4.3人柿、使用npm卸載插件:npm uninstall

[-g] [--save-dev] PS:不要直接刪除本地插件包

4.3.1柴墩、刪除全部插件:npm uninstall gulp-less gulp-uglify gulp-concat……???太麻煩

4.3.2、借助rimraf:npm install rimraf -g用法:rimraf node_modules

4.4凫岖、使用npm更新插件:npm update [-g] [--save-dev]

4.4.1江咳、更新全部插件:npm update [--save-dev]

4.5、查看npm幫助:npm help

4.6哥放、當(dāng)前目錄已安裝插件:npm list

5歼指、選裝cnpm

5.1、說明:因為npm安裝插件是從國外服務(wù)器下載甥雕,受網(wǎng)絡(luò)影響大东臀,可能出現(xiàn)異常,如果npm的服務(wù)器在中國就好了犀农,“這是一個完整npmjs.org鏡像惰赋,你可以用此代替官方版本(只讀),同步頻率目前為10分鐘一次以保證盡量與官方服務(wù)同步呵哨×薇簦”;

5.2孟害、官方網(wǎng)址:http://npm.taobao.org拒炎;

5.3、安裝:命令提示符執(zhí)行npm install cnpm -g

--registry=https://registry.npm.taobao.org挨务;注意:安裝完后最好查看其版本號cnpm -v或關(guān)閉命令提示符重新打開击你,安裝完直接使用有可能會出現(xiàn)錯誤;

注:cnpm跟npm用法完全一致谎柄,只是在執(zhí)行命令時將npm改為cnpm(以下操作將以cnpm代替npm)丁侄。

3.常見問題

1、什么是流朝巫?

2鸿摇、為什么要使用gulp?

3、如何使用gulp

4.解決方案

1劈猿、利用Node.js流(stream)的威力拙吉,你可以快速構(gòu)建項目并減少頻繁的IO操作。

如果要復(fù)制一個文件的話揪荣,一種方式是把文件內(nèi)容全部讀入內(nèi)存筷黔,然后再寫入文件,對于小型的文本文件仗颈,這沒有多大問題佛舱,比如grunt-file-copy就是這樣實現(xiàn)的。但是對于體積較大的二進(jìn)制文件,比如音頻名眉、視頻文件粟矿,動輒幾個GB大小,如果使用這種方法损拢,很容易使內(nèi)存“爆倉”陌粹。理想的方法應(yīng)該是讀一部分,寫一部分福压,不管文件有多大掏秩,只要時間允許,總會處理完成荆姆,這里就需要用到流的概念蒙幻。

如上面的圖片所示,我們把文件比作裝水的桶胆筒,而水就是文件里的內(nèi)容邮破,我們用一根管子(pipe)連接兩個桶使得水從一個桶流入另一個桶,這樣就慢慢的實現(xiàn)了大文件的復(fù)制過程仆救。

2抒和、為什么要使用gulp?

2.1彤蔽、易于使用:通過代碼優(yōu)于配置的策略摧莽,Gulp讓簡單的任務(wù)簡單,復(fù)雜的任務(wù)可管理顿痪。

2.2镊辕、構(gòu)建快速:利用Node.js流的威力,你可以快速構(gòu)建項目并減少頻繁的IO操作蚁袭。

2.3征懈、插件高質(zhì):Gulp嚴(yán)格的插件指南確保插件如你期望的那樣簡潔高質(zhì)得工作。

2.4撕阎、易于學(xué)習(xí):通過最少的API受裹,掌握Gulp毫不費力碌补,構(gòu)建工作盡在掌握虏束。

3、如何使用gulp

3.1厦章、安裝全局gulp镇匀。

3.2、新建package.json文件:

全局安裝完成后袜啃,通過cmd進(jìn)入項目目錄創(chuàng)建package.json文件汗侵。使用npm init-y,-y表示會自動生成,省去一步步的選擇填空操作晰韵。package.json是基于nodejs項目必不可少的配置文件发乔,它是存放在項目根目錄的普通json文件。(注意:json文件內(nèi)是不能寫注釋的雪猪,這里只是為了說明)

3.3栏尚、本地安裝gulp及插件

安裝:定位目錄命令后提示符執(zhí)行npm install name --save-dev;將會安裝在node_modules的name目錄下只恨,該目錄下有一個使用幫助文檔README.md译仗;

為了能正常使用,我們還得本地安裝gulp:npm install gulp

--save-dev官觅;

我們?nèi)职惭b了gulp纵菌,項目也安裝了gulp,全局安裝gulp是為了執(zhí)行g(shù)ulp任務(wù)休涤,本地安裝gulp則是為了調(diào)用gulp插件的功能咱圆。Gulp插件有四個是用得最多的,必備的功氨。

1闷堡、語法檢查(gulp-jshint)

2、合并文件(gulp-concat)

3疑故、壓縮代碼(gulp-uglify)

4杠览、文件重命名(gulp-rename)

4.4、新建gulpfile.js文件(重要)

gulpfile.js是gulp項目的配置文件纵势,是位于項目根目錄的普通js文件(其實將gulpfile.js放入其他文件夾下亦可)踱阿。

5.編碼實戰(zhàn)

上傳demo為gulpfile.js文件,需要自己自行下載相關(guān)插件在本地運行钦铁。

詳細(xì)請看視頻過程

6.擴(kuò)展思考

gulp常用的的API:task软舌,run,watch牛曹,src佛点,和dest。請結(jié)合demo使用黎比。

1超营、gulp.src(globs[, options])

輸出符合所提供的匹配模式(glob)或者匹配模式的數(shù)組(array of globs)的文件。

globs參數(shù)是文件匹配模式(類似正則表達(dá)式)阅虫,用來匹配文件路徑(包括文件名)演闭,當(dāng)然這里也可以直接指定某個具體的文件路徑。當(dāng)有多個匹配模式時颓帝,該參數(shù)可以為一個數(shù)組米碰。

options為可選參數(shù)窝革。通常情況下我們不需要用到。

2吕座、gulp.dest(path[, options])

gulp.dest()方法是用來寫文件path為寫入文件的路徑虐译,如果文件夾不存在,將會自動創(chuàng)建它吴趴。

options為一個可選的參數(shù)對象菱蔬,通常我們不需要用到

3、gulp.task(name[, deps], fn)

用來定義任務(wù)史侣,name為任務(wù)名

deps是當(dāng)前定義的任務(wù)需要依賴的其他任務(wù)拴泌,為一個數(shù)組。當(dāng)前定義的任務(wù)會在所有依賴的任務(wù)執(zhí)行完畢后才開始執(zhí)行惊橱。如果沒有依賴蚪腐,則可省略這個參數(shù)

fn為任務(wù)函數(shù),我們把任務(wù)要執(zhí)行的代碼都寫在里面税朴。該參數(shù)也是可選的回季。

4、gulp.watch(glob [, opts],tasks)

glob為要監(jiān)視的文件匹配模式正林,用來指定具體監(jiān)控哪些文件的變動

opts為一個可選的配置對象泡一,通常不需要用到

tasks為文件變化后要執(zhí)行的任務(wù),為一個數(shù)組

5觅廓、gulp.run(tasks...)盡可能多的并行運行多個task鼻忠。

理想的寫法是能控制哪些任務(wù)串行執(zhí)行,哪些任務(wù)并行執(zhí)行杈绸。

解決辦法:

1帖蔓、每個需要依賴其他任務(wù)的任務(wù)寫依賴。

2瞳脓、使用插件

3塑娇、gulp的當(dāng)前最新、未正式發(fā)布版本gulp 4.0也提供了新的API(series劫侧、parallel)來解決這個問題埋酬。series里的任務(wù)是順序執(zhí)行的,parallel里的任務(wù)是同時執(zhí)行的烧栋。

7.參考文獻(xiàn)

參考一:gulp

API文檔http://www.gulpjs.com.cn/docs/api/

參考二:Gulp的安裝配置過程和一些小坑http://www.cnblogs.com/rion1234567/p/5556891.html

參考三:前端構(gòu)建工具gulpjs的使用介紹及技巧http://www.cnblogs.com/2050/p/4198792.html

參考四:gulp詳細(xì)入門教程http://www.ydcss.com/archives/18

8.更多討論

gulp写妥、grunt、webpack的區(qū)別

gulp和grunt是同一種類型的工具劲弦,能夠優(yōu)化前端工作流程耳标。

gulpjs是一個前端構(gòu)建工具,與gruntjs相比邑跪,gulpjs無需寫一大堆繁雜的配置參數(shù)次坡,API也非常簡單,學(xué)習(xí)起來很容易画畅,而且gulpjs使用的是nodejs中stream來讀取和操作數(shù)據(jù)砸琅,其速度更快。

gulp強調(diào)的是前端開發(fā)的工作流程轴踱,我們可以通過配置一系列的task症脂,定義task處理的事務(wù)(例如文件壓縮合并、雪碧圖淫僻、啟動server诱篷、版本控制等),然后定義執(zhí)行順序雳灵,來讓gulp執(zhí)行這些task棕所,從而構(gòu)建項目的整個前端開發(fā)流程。

webpack是一個前端模塊化方案悯辙,更側(cè)重模塊打包琳省,我們可以把開發(fā)中的所有資源(圖片、js文件躲撰、css文件等)都看成模塊针贬,通過loader(加載器)和plugins(插件)對資源進(jìn)行處理,打包成符合生產(chǎn)環(huán)境部署的前端資源拢蛋。

gulp和webpack雖然都是前端自動化構(gòu)建工具桦他,但看他們的定位就知道不是對等的。gulp嚴(yán)格上講谆棱,模塊化不是他強調(diào)的東西瞬铸,他旨在規(guī)范前端開發(fā)流程。webpack更是明顯強調(diào)模塊化開發(fā)础锐,而那些文件壓縮合并嗓节、預(yù)處理等功能,不過是他附帶的功能皆警。

gulp與webpack上是互補的拦宣,還是可替換的,取決于你項目的需求信姓。

問題:1鸵隧、gulp除了壓縮合并外還有什么其他的功能?

? ? ? ? ? ?2意推、gulp壓縮過后的文件可以直接進(jìn)行改動并生效嗎豆瘫?

PPT地址:https://ptteng.github.io/PPT/PPT/js-11-How-to-use-gulp.html#/

視頻地址:https://v.qq.com/x/page/g0515j0abb4.html

今天的分享就到這里啦,歡迎大家點贊菊值、轉(zhuǎn)發(fā)外驱、留言育灸、拍磚~

下期預(yù)告:angular有哪些優(yōu)缺點?

------------------------------------------------------------------------------------------------------------------------

技能樹.IT修真院

“我們相信人人都可以成為一個工程師昵宇,現(xiàn)在開始磅崭,找個師兄,帶你入門瓦哎,掌控自己學(xué)習(xí)的節(jié)奏砸喻,學(xué)習(xí)的路上不再迷茫”蒋譬。

這里是技能樹.IT修真院割岛,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化犯助,成長可見化癣漆,師兄1對1免費指導(dǎo)∫睬校快來與我一起學(xué)習(xí)吧~

我的邀請碼:96194340扑媚,或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/96194340

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雷恃,隨后出現(xiàn)的幾起案子疆股,更是在濱河造成了極大的恐慌,老刑警劉巖倒槐,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旬痹,死亡現(xiàn)場離奇詭異,居然都是意外死亡讨越,警方通過查閱死者的電腦和手機两残,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來把跨,“玉大人人弓,你說我怎么就攤上這事∽胖穑” “怎么了崔赌?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耸别。 經(jīng)常有香客問我健芭,道長,這世上最難降的妖魔是什么秀姐? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任慈迈,我火速辦了婚禮,結(jié)果婚禮上痒留,老公的妹妹穿的比我還像新娘谴麦。我一直安慰自己狭瞎,他們只是感情好搏予,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布熊锭。 她就那樣靜靜地躺著雪侥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪速缨。 梳的紋絲不亂的頭發(fā)上锌妻,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音旬牲,去河邊找鬼仿粹。 笑死,一個胖子當(dāng)著我的面吹牛原茅,可吹牛的內(nèi)容都是我干的吭历。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼擂橘,長吁一口氣:“原來是場噩夢啊……” “哼晌区!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起通贞,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤朗若,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昌罩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哭懈,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年茎用,在試婚紗的時候發(fā)現(xiàn)自己被綠了遣总。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡绘搞,死狀恐怖彤避,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夯辖,我是刑警寧澤琉预,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站蒿褂,受9級特大地震影響圆米,放射性物質(zhì)發(fā)生泄漏卒暂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一娄帖、第九天 我趴在偏房一處隱蔽的房頂上張望也祠。 院中可真熱鬧,春花似錦近速、人聲如沸诈嘿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奖亚。三九已至,卻和暖如春析砸,著一層夾襖步出監(jiān)牢的瞬間昔字,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工首繁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留作郭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓弦疮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挂捅。 傳聞我的和親對象是個殘疾皇子芹助,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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

  • gulpjs是一個前端構(gòu)建工具,與gruntjs相比伺糠,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單训桶,學(xué)...
    依依玖玥閱讀 3,149評論 7 55
  • 1舵揭、gulp的安裝 首先確保你已經(jīng)正確安裝了nodejs環(huán)境。然后以全局方式安裝gulp: npm install...
    F_imok閱讀 2,357評論 1 11
  • gulpjs是一個前端構(gòu)建工具置侍,與gruntjs相比蜡坊,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單秕衙,學(xué)...
    井皮皮閱讀 1,291評論 0 10
  • gulpjs是一個前端構(gòu)建工具据忘,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)能岩,API也非常簡單寞宫,學(xué)...
    小裁縫sun閱讀 921評論 0 3
  • gulpjs是一個前端構(gòu)建工具辈赋,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)悟民,API也非常簡單,學(xué)...
    build1024閱讀 527評論 0 0