gulp入門教程

簡介:
gulp是前端開發過程中對代碼進行構建的工具,是自動化項目的構建利器;她不僅能對網站資源進行優化,而且在開發過程中很多重復的任務能夠使用正確的工具自動完成;使用她,我們不僅可以很愉快的編寫代碼,而且大大提高我們的工作效率。

gulp是基于Nodejs的自動任務運行器,
她能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合并、壓縮、格式化、瀏覽器自動刷新、部署文件生成,并監聽文件在改動后重復指定的這些步驟。

在實現上,她借鑒了Unix操作系統的管道(pipe)思想,前一級的輸出,直接變成后一級的輸入,使得在操作上非常簡單。通過本文,我們將學習如何使用Gulp來改變開發流程,從而使開發更加快速高效。

gulp 和 grunt 非常類似,但相比于 grunt 的頻繁 IO 操作,gulp 的流操作,能更快地更便捷地完成構建工作。
本示例以gulp-less為例(將less編譯成css的gulp插件)展示gulp的常規用法,只要我們學會使用一個gulp插件后,其他插件就差看看其幫助文檔了。讓我們一起來學習gulp吧! _

在學習前,先談談大致使用gulp的步驟,給讀者以初步的認識。首先當然是安裝nodejs,通過nodejs的npm全局安裝和項目安裝gulp,其次在項目里安裝所需要的gulp插件,然后新建gulp的配置文件gulpfile.js并寫好配置信息(定義gulp任務),最后通過命令提示符運行gulp任務即可。
安裝nodejs -> 全局安裝gulp -> 項目安裝gulp以及gulp插件 -> 配置gulpfile.js -> 運行任務
1、安裝nodejs
1.1、說明:gulp是基于nodejs,理所當然需要安裝nodejs;
1.2、安裝:打開nodejs官網,點擊碩大的綠色Download按鈕,它會根據系統信息選擇對應版本(.msi文件)。然后像安裝QQ一樣安裝它就可以了(安裝路徑隨意)。
2、使用命令行(如果你熟悉命令行,可以直接跳到第3步
2.1、說明:什么是命令行?命令行在OSX是終端(Terminal),在windows是命令提示符(Command Prompt);
2.2、注:之后操作都是在windows系統下;
2.3、簡單介紹gulp在使用過程中常用命令,打開命令提示符執行下列命令(打開方式:window + r 輸入cmd回車):
node -v查看安裝的nodejs版本,出現版本號,說明剛剛已正確安裝nodejs。PS:未能出現版本號,請嘗試注銷電腦重試;
npm -v查看npm的版本號,npm是在安裝nodejs時一同安裝的nodejs包管理器,那它有什么用呢?稍后解釋;
cd定位到目錄,用法:cd + 路徑 ;
dir列出文件列表;
cls清空命令提示符窗口內容。


3、npm介紹
3.1、說明:npm(node package manager)nodejs的包管理器,用于node插件管理(包括安裝、卸載、管理依賴等);
3.2、使用npm安裝插件:命令提示符執行npm install <name> [-g] [--save-dev]
;
3.2.1、
<name>
:node插件名稱。例:npm install gulp-less --save-dev
**
3.2.2、
-g:全局安裝。將會安裝在C:UsersAdministratorAppDataRoamingnpm
,并且寫入系統環境變量; 非全局安裝:將會安裝在當前定位目錄; 全局安裝可以通過命令行在任何地方調用它,本地安裝將安裝在定位目錄的node_modules文件夾下,通過require()調用;
3.2.3、
--save
:將保存配置信息至package.json(package.json是nodejs項目配置文件);
3.2.4、
-dev:保存至package.json的devDependencies節點,不指定-dev將保存至dependencies節點;
3.2.5、為什么要保存至package.json?因為node插件包相對來說非常龐大,所以不加入版本管理,將配置信息寫入package.json并將其加入版本管理,其他開發者對應下載即可(命令提示符執行
npm install,則會根據package.json下載所有需要的包)。
3.4、使用npm卸載插件:
npm uninstall <name> [-g] [--save-dev]
** PS:不要直接刪除本地插件包
3.5、使用npm更新插件:npm update <name> [-g] [--save-dev]
**
3.6、查看npm幫助:
npm help**
3.7、當前目錄已安裝插件:npm list
PS:npm安裝插件過程:從http://registry.npmjs.org下載對應的插件包(該網站服務器位于國外,所以經常下載緩慢或出現異常),解決辦法往下看↓↓↓↓↓↓。
4、選裝cnpm
4.1、說明:因為npm安裝插件是從國外服務器下載,受網絡影響大,可能出現異常,如果npm的服務器在中國就好了,所以我們樂于分享的淘寶團隊干了這事。32個!來自官網:“這是一個完整 npmjs.org 鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步?!?/strong>;
4.2、官方網址:http://npm.taobao.org;
4.3、安裝:命令提示符執行npm install cnpm -g --registry=https://registry.npm.taobao.org
; 注意:安裝完后最好查看其版本號cnpm -v
或關閉命令提示符重寫打開,安裝完直接使用有可能會出現錯誤;
注:cnpm跟npm用法完全一致,只是在執行命令時將npm改為cnpm(以下操作將以cnpm代替npm)。
5、全局安裝gulp
5.1、說明:全局安裝gulp目的是為了通過她執行gulp任務;
5.2、安裝:命令提示符執行cnpm install gulp -g;
5.3、查看是否正確安裝:命令提示符執行gulp -v,出現版本號即為正確安裝。
6、新建package.json文件
6.1、說明:package.json是基于nodejs項目必不可少的配置文件,它是存放在項目根目錄的普通json文件;
6.2、它是這樣一個json文件(注意:json文件內是不能寫注釋的,復制下列內容請刪除注釋)
JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

{
"name": "test", //項目名稱(必須)
"version": "1.0.0", //項目版本(必須)
"description": "This is for study gulp project !", //項目描述(必須)
"homepage": "", //項目主頁
"repository": { //項目資源庫
"type": "git",
"url": "https://git.oschina.net/xxxx"
},
"author": { //項目作者信息
"name": "surging",
"email": "surging2@qq.com"
},
"license": "ISC", //項目許可協議
"devDependencies": { //項目依賴的插件
"gulp": "^3.8.11",
"gulp-less": "^3.0.0"
}
}

6.3、當然我們可以手動新建這個配置文件,但是作為一名有志青年,我們應該使用更為效率的方法:命令提示符執行cnpm init


6.4、查看package.json幫助文檔,命令提示符執行cnpm help package.json
特別注意:package.json是一個普通json文件,所以不能添加任何注釋。參看 http://www.zhihu.com/question/23004511
7、本地安裝gulp插件
7.1、安裝:定位目錄命令后提示符執行**cnpm install --save-dev
;
7.2、本示例以gulp-less為例(編譯less文件),命令提示符執行
cnpm install gulp-less --save-dev
;

7.3、將會安裝在node_modules的gulp-less目錄下,該目錄下有一個gulp-less的使用幫助文檔README.md;
7.4、為了能正常使用,我們還得本地安裝gulp:
cnpm install gulp --save-dev
**;
PS:細心的你可能會發現,我們全局安裝了gulp,項目也安裝了gulp,全局安裝gulp是為了執行gulp任務,本地安裝gulp則是為了調用gulp插件的功能。
8、新建gulpfile.js文件(重要)
8.1、說明:gulpfile.js是gulp項目的配置文件,是位于項目根目錄的普通js文件(其實將gulpfile.js放入其他文件夾下亦可)。
8.2、它大概是這樣一個js文件(更多插件配置請查看這里):
JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

//導入工具包 require('node_modules里對應模塊')
var gulp = require('gulp'), //本地安裝gulp所用到的地方
less = require('gulp-less');

//定義一個testLess任務(自定義任務名稱)
gulp.task('testLess', function () {
gulp.src('src/less/index.less') //該任務針對的文件
.pipe(less()) //該任務調用的模塊
.pipe(gulp.dest('src/css')); //將會在src/css下生成index.css
});

gulp.task('default',['testLess', 'elseTask']); //定義默認任務

//gulp.task(name[, deps], fn) 定義任務 name:任務名稱 deps:依賴任務名稱 fn:回調函數
//gulp.src(globs[, options]) 執行任務處理的文件 globs:處理的文件路徑(字符串或者字符串數組)
//gulp.dest(path[, options]) 處理完后文件生成路徑

8.3、該示例文件請下載查看
9、運行gulp
9.1、說明:命令提示符執行gulp 任務名稱;
9.2、編譯less:命令提示符執行gulp testLess;
9.3、當執行gulp defaultgulp將會調用default任務里的所有任務[‘testLess’,’elseTask’]。
10、使用webstorm運行gulp任務
10.1、說明:使用webstorm可視化運行gulp任務;
10.2、使用方法:將項目導入webstorm,右鍵gulpfile.js 選擇”Show Gulp Tasks”打開Gulp窗口,若出現”No task found”,選擇右鍵”Reload tasks”,雙擊運行即可。


11、總結
11.1、安裝nodejs;
11.2、新建package.json文件;
11.3、全局和本地安裝gulp;
11.4、安裝gulp插件;
11.5、新建gulpfile.js文件;
11.6、通過命令提示符運行gulp任務。
12、結束語
12.1、本文有任何錯誤,或有任何疑問,歡迎留言說明。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 最近使用gulp自動化構建工具來開發網站,在此給大家分享一下使用gulp的一些使用教程。 一 gulp安裝 1、安...
    穿越人海遇見你閱讀 13,197評論 2 17
  • 前言 眾所周知目前比較火的工具就是gulp和webpack,但webpack和gulp卻有所不同,本人兩者的底層研...
    cduyzh閱讀 1,383評論 0 13
  • 1.關于gulp gulp實質上就是基于流的代碼自動化構建工具,簡單來說就是代碼構建工具,那么我們為什么要使用代碼...
    KavinBright閱讀 484評論 0 0
  • Gulp簡介 最近流行前端構建工具,苦于之前使用Grunt,代碼很難閱讀,現在出了Gulp,真是擺脫了痛苦。發現了...
    小k博客閱讀 809評論 4 19
  • 昨天思考不可量化的認知,收到了很多同學的反饋。認知拉伸就會發現 "用正確的方式做正確的事" 這句話的的價值。其中對...
    逄格亮閱讀 383評論 0 0