gulp構(gòu)建詳細(xì)流程

簡介

gulp是前端開發(fā)過程中對(duì)代碼進(jìn)行自動(dòng)化構(gòu)建的工具置吓,它不僅能對(duì)網(wǎng)站資源進(jìn)行優(yōu)化衍锚,而且在開發(fā)過程中能避免很多重復(fù)的工作戴质,比如對(duì)相關(guān)文件的操作戈抄,還有自動(dòng)監(jiān)視一些文件的變化等功能划鸽。

構(gòu)建流程

Node.js安裝

gulp是基于Node開發(fā)環(huán)境運(yùn)行的,所以需要使用npm的包管理工具去安裝它戚哎。要使用npm裸诽,就必須安裝Node.js,可前往Node.js的官網(wǎng)下載:

http://nodejs.cn/download/

下載并安裝完成后建瘫,運(yùn)行Node.js command prompt并輸入命令:

node -v  // 出現(xiàn)版本號(hào)即為node安裝成功
npm -v  // 出現(xiàn)版本號(hào)即為npm安裝成功

gulp安裝

安裝好Node.js之后崭捍,接著在Node.js command prompt中輸入命令:

npm install -g gulp         
// 全局安裝gulp,”-g”代表全局

gulp -v
// 出現(xiàn)版本號(hào)即為gulp安裝成功

cd 項(xiàng)目根目錄所在位置                   
// 進(jìn)入到項(xiàng)目根目錄 

npm init                    
// 初始化項(xiàng)目啰脚,之后是一連串的信息填寫殷蛇,最后生成package.json

npm install gulp --save-dev 
// 項(xiàng)目安裝gulp依賴
// --save的作用是將配置信息保存至package.json文件中
// -dev的作用是保存至package.json中的devDependencies對(duì)象內(nèi)实夹,不指定則會(huì)保存到dependencies對(duì)象中

如果對(duì)于前端自動(dòng)化構(gòu)建工具熟悉的朋友應(yīng)該知道,package.json定義了項(xiàng)目所需要的各種模塊粒梦,以及項(xiàng)目的配置信息亮航,接下來我主要對(duì)這個(gè)文件的內(nèi)容進(jìn)行介紹(PS:規(guī)范的package.json不能出現(xiàn)注釋):

{
  "name": "test",               //項(xiàng)目名稱
  "version": "1.0.0",           //項(xiàng)目版本
  "description": "This is my first gulp project !",   //項(xiàng)目描述
  "homepage": "index.js",               //項(xiàng)目主頁
  "repository": {             
    "type": "git",                      //倉庫類型
    "url": "https://git.oschina.net/xxxx"              //倉庫地址
  },
  "scripts": {
    "dev": "cross-env NODE_ENV=dev gulp dev",
    "build": "cross-env NODE_ENV=production gulp build"
  },
  "author": {                 
    "name": "alolonghun",          //作者名
    "email": "906268297@qq.com"    //作者郵箱
  },
  "license": "ISC",                //項(xiàng)目許可協(xié)議
  "devDependencies": {             //項(xiàng)目開發(fā)環(huán)境依賴的插件
    "gulp": "^3.9.1",
    "gulp-less": "^3.3.2",
    "gulp-sass": "^3.1.0",
    "cross-env": "^5.0.5",
    "del": "^3.0.0",
    "gulp-concat": "^2.6.1",
    "gulp-uglify": "^3.0.0",
    "webpack": "^3.5.5"
  },
  "dependencies": {             //項(xiàng)目生產(chǎn)環(huán)境依賴的插件
    ...
  }
}

如果對(duì)于package.json文件還有什么不理解的,可以輸入以下命令獲取幫助:

npm help package.json

相關(guān)依賴插件的安裝

依然在Node.js command prompt中操作:

npm install gulp-less cross-env del gulp-concat gulp-uglify webpack --save-dev
//一次性可安裝多個(gè)依賴插件

這里要注意一下:
由于網(wǎng)絡(luò)原因匀们,gulp-sass的安裝比較特殊缴淋,可能會(huì)安裝失敗,因?yàn)榘惭b過程中部分細(xì)節(jié)會(huì)到亞馬遜云服務(wù)器上獲取文件泄朴,獲取失敗則安裝不了重抖。
詳細(xì)安裝過程如下:
執(zhí)行安裝gulp-sass命令,這個(gè)過程中會(huì)先安裝 node-sass 祖灰,因?yàn)?gulp-sass 依賴于 node-sass 钟沛。中間出現(xiàn)的錯(cuò)誤信息類似下面這條:
Cannot download https://github.com/sass/node-sass/releases/download/v3.4.2/win32-x64-46_bind
現(xiàn)象是這些二進(jìn)制文件使用了GitHub的lfs 服務(wù),而lfs使用的是亞馬遜云局扶,由于網(wǎng)絡(luò)原因恨统,這些服務(wù)器無法訪問。
解決方法有以下三種:

方法一:進(jìn)入項(xiàng)目根目錄三妈,執(zhí)行命令(最簡單的方法):
npm install --save-dev gulp-sass@latest

方法二:首先全局環(huán)境下配置淘寶鏡像(PS:這里是全局環(huán)境畜埋,不是項(xiàng)目根目錄)
執(zhí)行語句:npm install -g cnpm --registry=https://registry.npm.taobao.org
然后進(jìn)入項(xiàng)目根目錄,執(zhí)行語句:cnpm install --save-dev node-sass
仍然是項(xiàng)目根目錄畴蒲,執(zhí)行語句: npm install --save-dev gulp-sass

方法三:下載源碼悠鞍,然后自己編譯一個(gè)二進(jìn)制文件或翻墻下載一個(gè)官方的二進(jìn)制文件,來解決該文件的下載問題模燥,之后就能順利安裝gulp-sass了狞玛。
可參考:http://blog.csdn.net/jimmyhandy/article/details/50723174

編寫gulpfile.js文件

gulpfile.js是gulp項(xiàng)目的配置文件,負(fù)責(zé)配置編譯打包等相關(guān)任務(wù)涧窒,gulpfile.js類似JS的語法心肪,也支持ES6,具體可參照gulp.js官網(wǎng)的語法:

http://www.gulpjs.com.cn/docs/api/

這里簡單介紹一下gulpfile.js:

// 使用 require('node_modules里對(duì)應(yīng)模塊') 的語法
// 引入gulp
var gulp = require('gulp');

//導(dǎo)入相關(guān)插件包 
var less = require('gulp-less'),
    sass = require('gulp-sass'),
    minifycss = require('gulp-minify-css'),
    concat = require("gulp-concat"),
    uglify = require("gulp-uglify"),
    del = require("del");
 
// "./src/a.js":當(dāng)前目錄中src目錄下的a.js文件;
// "*":匹配所有文件            例:src/*.js(包含src下的所有js文件);
// "**":匹配0個(gè)或多個(gè)子文件夾   例:src/**/*.js(包含src的0個(gè)或多個(gè)子文件夾下的js文件);
// "{}":匹配多個(gè)屬性           例:src/{a,b}.js(包含a.js和b.js文件)  src/*.{jpg,png,gif}(src下的所有jpg/png/gif文件);
// "!":排除文件                例:!src/a.js(不包含src下的a.js文件);
var src = {
    images: './src/**/*.{png,jpg,jpeg,svg}',
    js: './src/**/*.js',
    less: './src/**/*.less',
    scss: './src/**/*.scss'
};

// gulp.task(name[, deps], fn) 定義任務(wù)  name:任務(wù)名稱 deps:依賴任務(wù)名稱 fn:回調(diào)函數(shù)
// gulp.src(globs[, options]) 執(zhí)行任務(wù)處理的文件  globs:處理的文件路徑(字符串或者字符串?dāng)?shù)組) 
// gulp.dest(path[, options]) 處理完后文件生成路徑
// gulp.watch(glob[, opts], tasks) 監(jiān)視文件纠吴,并且可以在文件發(fā)生改動(dòng)時(shí)候做一些事情硬鞍。
// 注意:gulp.run()方法已被廢棄

// 創(chuàng)建一個(gè)"clean"任務(wù),作用是在編譯文件之前清空dist目錄下的文件 
gulp.task('clean', function(cb) { 
    return del([
        './dist/**/*'
    ], cb); 
});

// sass 任務(wù)會(huì)編譯scss文件戴已,并把編譯完成的css文件保存到指定目錄中
 gulp.task('sass',function () {
     gulp.src(src.scss)
         .pipe(sass({outputStyle: 'compact'}))     //sass轉(zhuǎn)css
         .pipe(minifycss())                        //壓縮css
         .pipe(gulp.dest("./dist/css"));           //輸出到./dist/css目錄下
 });

// 同上固该,創(chuàng)建一個(gè)名為"less"的任務(wù)
gulp.task(less', function () {
    gulp.src(src.less)                  
        .pipe(less())                     //less轉(zhuǎn)css
        .pipe(minifycss())                //壓縮css
        .pipe(gulp.dest('./dist/css'));   //輸出到./dist/css目錄下
});

// 合并,壓縮文件
// scripts任務(wù)會(huì)合并所有js文件糖儡,壓縮合并后的文件伐坏,輸出到dist目錄。
 gulp.task('scripts',function () {
     gulp.src(src.js)
         .pipe(concat('index.js'))         //合并所有js文件到index.js
         .pipe(uglify())                   //壓縮合并后的文件
         .pipe(gulp.dest("./dist"))        //輸出到dist目錄下
 });

//創(chuàng)建dev任務(wù)
 gulp.task('dev',function(){
    // 監(jiān)聽文件變化
     gulp.watch("src/**/*", ['sass', 'less', 'scripts']);
 });
 
//創(chuàng)建build任務(wù)握联,關(guān)聯(lián)和運(yùn)行上面定義的任務(wù)
gulp.task('build', ['sass', 'less', 'scripts']); 

程序運(yùn)行及打包

運(yùn)行命令:npm run dev
打包命令:npm run build

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桦沉,一起剝皮案震驚了整個(gè)濱河市每瞒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纯露,老刑警劉巖剿骨,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異埠褪,居然都是意外死亡浓利,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門钞速,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贷掖,“玉大人,你說我怎么就攤上這事渴语∮鹱剩” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵遵班,是天一觀的道長。 經(jīng)常有香客問我潮改,道長狭郑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任汇在,我火速辦了婚禮翰萨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糕殉。我一直安慰自己亩鬼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布阿蝶。 她就那樣靜靜地躺著雳锋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羡洁。 梳的紋絲不亂的頭發(fā)上玷过,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音筑煮,去河邊找鬼辛蚊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛真仲,可吹牛的內(nèi)容都是我干的袋马。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼秸应,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虑凛!你這毒婦竟也來了碑宴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤卧檐,失蹤者是張志新(化名)和其女友劉穎墓懂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霉囚,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捕仔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盈罐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榜跌。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盅粪,靈堂內(nèi)的尸體忽然破棺而出钓葫,到底是詐尸還是另有隱情,我是刑警寧澤票顾,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布础浮,位于F島的核電站,受9級(jí)特大地震影響奠骄,放射性物質(zhì)發(fā)生泄漏豆同。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一含鳞、第九天 我趴在偏房一處隱蔽的房頂上張望影锈。 院中可真熱鬧,春花似錦蝉绷、人聲如沸鸭廷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辆床。三九已至,卻和暖如春桅狠,著一層夾襖步出監(jiān)牢的瞬間佛吓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工垂攘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留维雇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓晒他,卻偏偏與公主長得像吱型,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陨仅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • gulpjs是一個(gè)前端構(gòu)建工具津滞,與gruntjs相比铝侵,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單触徐,學(xué)...
    依依玖玥閱讀 3,149評(píng)論 7 55
  • gulpjs是一個(gè)前端構(gòu)建工具咪鲜,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)撞鹉,API也非常簡單疟丙,學(xué)...
    井皮皮閱讀 1,292評(píng)論 0 10
  • gulpjs是一個(gè)前端構(gòu)建工具勤众,與gruntjs相比宵蕉,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單巡扇,學(xué)...
    小裁縫sun閱讀 921評(píng)論 0 3
  • 安裝Gulp首先需要安裝Node.js孝鹊,并在控制臺(tái)輸入$ npm install gulp -gMac端需要寫成$...
    LaBaby_閱讀 909評(píng)論 0 1
  • 1炊琉、gulp的安裝 首先確保你已經(jīng)正確安裝了nodejs環(huán)境。然后以全局方式安裝gulp: npm install...
    F_imok閱讀 2,357評(píng)論 1 11