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