30分鐘讓前端學(xué)會(huì)gulp(紐約的老鄭原創(chuàng))

尼奧:我親愛(ài)的墨菲斯,請(qǐng)問(wèn)什么叫g(shù)ulp?
墨菲斯:...,尼奧你又要學(xué)人家偽前端裝B了...
尼奧:裝B更健康,我愿意裝音念,請(qǐng)你告訴我吧
墨菲斯:....

那么,什么是gulp呢躏敢?
我們學(xué)過(guò)哲學(xué)我們都知道闷愤,要回答一個(gè)東西是什么很難,但是我們畢竟學(xué)過(guò)語(yǔ)文的件余,我們知道有一種修辭手法叫類比讥脐,所以我想了半天,gulp可以用一個(gè)我們?cè)趙indows里司空見(jiàn)慣的東西來(lái)類比啼器,作用是一樣的:

gulp稍微比git難一點(diǎn)旬渠,所以及15分鐘是不夠的,要花上30分鐘時(shí)間端壳。

bat

這個(gè)bat不是那三大神一樣公司告丢,我說(shuō)的是

批處理

度娘百科走起

u=2778387390,1823683051&fm=21&gp=0.jpg

恩,騙一個(gè)算一個(gè)损谦!

親愛(ài)的孩子們懂了沒(méi)有岖免?

OK,我們開(kāi)始學(xué)習(xí)怎么使用吧U占瘛颅湘!

安裝node

點(diǎn)擊這里
下載這個(gè):

npm.png

下載完了,一個(gè)exe,那么你懂的麻敌,下一步下一步

驗(yàn)證你安裝成功了

打開(kāi)命令行CMD栅炒,看下面:

555.png

安裝taobao源

這一步其實(shí)不應(yīng)該有的,但是GFW术羔,你懂的赢赊,所以照做吧!<独释移!
在命令行里輸入:

npm install -g cnpm --registry=https://registry.npm.taobao.org

安裝gulp

cnpm install --global gulp

使用gulp

我認(rèn)為最快的學(xué)會(huì)一個(gè)東西的辦法不是糾結(jié)原理,而是直接拿過(guò)來(lái)用寥殖,所以玩讳,我們推薦你直接拿我弄好的一個(gè)庫(kù)myQuery來(lái)練手就行了。
我已經(jīng)把你可能用得上的百分之八十的gulp插件直接配套好了嚼贡,直接用就行了熏纯。

安裝myQuery

有二種安裝方式

第一種:

cnpm install myquery  

第二種:

  git clone https://github.com/moyu-edu/myQuery.git

初始化myQuery

 cnpm install

使用gulp

gulp dev
 開(kāi)發(fā)的時(shí)候訪問(wèn)
gulp devsass
 適合使用sass的用戶
gulp devless
 適合使用less的用戶
gulp
 上線版本執(zhí)行的命令,會(huì)進(jìn)行eslint檢測(cè)并進(jìn)行壓縮代碼粤策,如果執(zhí)行成功可以到dist文件夾中看到您的js壓縮代碼
gulp postcss
 自動(dòng)加前綴等

解讀gulpfile.js

var gulp = require("gulp");//gulp主對(duì)象

var util = require("gulp-util");//gulp的工具對(duì)象

var notify = require("gulp-notify");

var uglify = require("gulp-uglify");

var rename = require("gulp-rename");

var eslint = require('gulp-eslint');

var sourcemaps = require('gulp-sourcemaps');

var gls = require('gulp-live-server');

var sass = require("gulp-scss");

var watch = require('gulp-watch');

var autoprefixer = require("gulp-autoprefixer");

var less = require('gulp-less');

//dev服務(wù)器環(huán)境

gulp.task('dev', function() {

//1. serve with default settings 

var server = gls.static(['examples',"node_modules/qunitjs/qunit/","src/"], 80) //equals to gls.static('public', 3000); 

server.start();

});

//編譯sass

gulp.task("sass",function(){

gulp.src("examples/scss/*.scss")

.pipe(sass())

.pipe(gulp.dest("examples/css/"))

});

//實(shí)時(shí)編譯sass

gulp.task("sasswatch",function(){

watch("examples/scss/*.scss",function(){

util.log("sass文件改變了");

gulp.start("sass");

})

})

//devSass服務(wù)器環(huán)境

gulp.task('devsass', function() {

//1. serve with default settings 

var server = gls.static(['examples',"node_modules/qunitjs/qunit/","src/"], 80) //equals to gls.static('public', 3000); 

server.start();

gulp.start("sasswatch");

});

//編譯less

gulp.task('less', function () {

return gulp.src('examples/less/*.less')

.pipe(less({}))

.pipe(gulp.dest('examples/css'));

});

//實(shí)時(shí)編譯less

gulp.task("lesswatch",function(){

watch("examples/less/*.less",function(){

util.log("less文件改變了");

gulp.start("less");

})

})

//devLess服務(wù)器環(huán)境

gulp.task('devless', function() {

//1. serve with default settings 

var server = gls.static(['examples',"node_modules/qunitjs/qunit/","src/"], 80) //equals to gls.static('public', 3000); 

server.start();

gulp.start("lesswatch");

});

//加前綴

gulp.task("postcss",function(){

return gulp.src("examples/scss/*.scss")

.pipe(sass())

.pipe(autoprefixer({

browsers:["Android 4.1", "iOS 5.1", "Chrome > 0", "ff > 0", "ie >= 0"]

}))

.pipe(gulp.dest("examples/css/"))

})

//上線前服務(wù)器環(huán)境

gulp.task('pub', function() {

//1. serve with default settings 

var server = gls.static(['examples',"node_modules/qunitjs/qunit/","dist/"], 80) //equals to gls.static('public', 3000); 

server.start();

});

gulp.task('compress', function() {

return gulp.src('src/*.js')

.pipe(sourcemaps.init())

.pipe(uglify())

.on("error", notify.onError(function (error) {

return "the step of uglify has some error: " + error.message;

}))

.pipe(rename(function(path){

path.basename = "myquery.min"

}))

.on("error", notify.onError(function (error) {

return "the step of rename has some error: " + error.message;

}))

.pipe(sourcemaps.write('../maps'))

.pipe(gulp.dest('dist'))

.pipe(notify({

message : 'no bug,congratulations,you are doing a good job!!'

}));

});

gulp.task('lint', function () {

// ESLint ignores files with "node_modules" paths. 

// So, it's best to have gulp ignore the directory as well. 

// Also, Be sure to return the stream from the task; 

// Otherwise, the task may end before the stream has finished. 

return gulp.src(['**/*.js','!node_modules/**'])

// eslint() attaches the lint output to the "eslint" property 

// of the file object so it can be used by other modules. 

.pipe(eslint())

// eslint.format() outputs the lint results to the console. 

// Alternatively use eslint.formatEach() (see Docs). 

.pipe(eslint.format())

// To have the process exit with an error code (1) on 

// lint error, return the stream and pipe to failAfterError last. 

.pipe(eslint.failAfterError());

});

gulp.task( 'default', ['lint',"compress"], function(){

//blablabla

});

這么長(zhǎng)的文件是不是有點(diǎn)暈樟澜?我們直接定位到第29行這幾行代碼,就明白了:


//編譯less

gulp.task('less', function () {

return gulp.src('examples/less/*.less')

.pipe(less({}))

.pipe(gulp.dest('examples/css'));

});

看到?jīng)]有,我們這個(gè)文件是個(gè)js文件,gulp是一個(gè)對(duì)象秩贰,類似我們的window一樣霹俺,這個(gè)對(duì)象有一個(gè)屬性叫task,就像批處理一樣的執(zhí)行一個(gè)具體的任務(wù),然后形式最外在長(zhǎng)得像這樣:

gulp.task("你隨便起一個(gè)名字",回調(diào)函數(shù))

看到?jīng)]有毒费,基本上你剛才已經(jīng)見(jiàn)識(shí)了gulp的百分之七十的核心了就是這個(gè)形式丙唧。但是我們要想進(jìn)一步的了解,我們還得學(xué)一個(gè)抽象的東西觅玻,打起精神來(lái)想际,我們要學(xué)習(xí)的是東西叫"流"。

那么什么是流呢串塑?(停頓幾秒環(huán)視四周)
OK沼琉,說(shuō)到流我們想起什么呢?當(dāng)然是水啦桩匪。我找一段經(jīng)典的樂(lè)百氏廣告詞:

樂(lè)百氏27層凈化
第一層石英粗型沙過(guò)濾懸浮雜質(zhì)
第二層石英粗型沙過(guò)濾泥沙雜質(zhì)
第三層石英粗型沙過(guò)濾鐵銹雜質(zhì)
第四層石英粗型沙過(guò)濾膠體雜質(zhì)
第五層石英粗型沙過(guò)濾有機(jī)物雜質(zhì)
第六層石英中型沙過(guò)濾懸浮雜質(zhì)
第七層石英中型沙過(guò)濾泥沙雜質(zhì)
第八層石英中型沙過(guò)濾鐵銹雜質(zhì)
第九層石英中型沙過(guò)濾膠體雜質(zhì)
第十層石英中型沙過(guò)濾有機(jī)物雜質(zhì)
第十一層石英細(xì)型沙過(guò)濾懸浮雜質(zhì)
第十二層石英細(xì)型沙過(guò)濾泥沙雜質(zhì)
第十三層石英細(xì)型沙過(guò)濾鐵銹雜質(zhì)
第十四層石英細(xì)型沙過(guò)濾膠體雜質(zhì)
第十五層石英細(xì)型沙過(guò)濾有機(jī)物雜質(zhì)

看到?jīng)]有打瘪,我們可以把最開(kāi)始的流想像成原水,然后經(jīng)過(guò)一層一層的過(guò)濾傻昙,慢慢的就形成了最終的純凈水了闺骚。

我們?cè)賮?lái)看一眼我們上面提到的回調(diào):


//編譯less

gulp.task('less', function () {

return gulp.src('examples/less/*.less')

.pipe(less({}))

.pipe(gulp.dest('examples/css'));

});

看到?jīng)]有,gulp.src(examples/less/*.less")你就想像成是原來(lái)一開(kāi)始的水,然后這個(gè)pipe你就想像成過(guò)濾器妆档,這樣一層一層的就會(huì)到最后一次輸入我們最終的純凈水啦僻爽! --> gulp.dest("examples/css")

OK,如果你看完了贾惦,gulp最重要的東西你已經(jīng)學(xué)到了胸梆,新技能get!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市须板,隨后出現(xiàn)的幾起案子碰镜,更是在濱河造成了極大的恐慌,老刑警劉巖习瑰,帶你破解...
    沈念sama閱讀 211,496評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绪颖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡甜奄,警方通過(guò)查閱死者的電腦和手機(jī)柠横,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)课兄,“玉大人牍氛,你說(shuō)我怎么就攤上這事⊙滩” “怎么了糜俗?”我有些...
    開(kāi)封第一講書人閱讀 157,091評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我悠抹,道長(zhǎng),這世上最難降的妖魔是什么扩淀? 我笑而不...
    開(kāi)封第一講書人閱讀 56,458評(píng)論 1 283
  • 正文 為了忘掉前任楔敌,我火速辦了婚禮,結(jié)果婚禮上驻谆,老公的妹妹穿的比我還像新娘卵凑。我一直安慰自己,他們只是感情好胜臊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布勺卢。 她就那樣靜靜地躺著,像睡著了一般象对。 火紅的嫁衣襯著肌膚如雪黑忱。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,802評(píng)論 1 290
  • 那天勒魔,我揣著相機(jī)與錄音甫煞,去河邊找鬼。 笑死冠绢,一個(gè)胖子當(dāng)著我的面吹牛抚吠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弟胀,決...
    沈念sama閱讀 38,945評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼楷力,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了孵户?” 一聲冷哼從身側(cè)響起萧朝,我...
    開(kāi)封第一講書人閱讀 37,709評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎延届,沒(méi)想到半個(gè)月后剪勿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡方庭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評(píng)論 2 327
  • 正文 我和宋清朗相戀三年厕吉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片械念。...
    茶點(diǎn)故事閱讀 38,637評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡头朱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出龄减,到底是詐尸還是另有隱情项钮,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站烁巫,受9級(jí)特大地震影響署隘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亚隙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評(píng)論 3 313
  • 文/蒙蒙 一磁餐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阿弃,春花似錦诊霹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,744評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至入愧,卻和暖如春鄙漏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砂客。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,982評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工泥张, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞠值。 一個(gè)月前我還...
    沈念sama閱讀 46,344評(píng)論 2 360
  • 正文 我出身青樓媚创,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親彤恶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钞钙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評(píng)論 2 348

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