前端自動化構建工具gulp的安裝和使用(包括添加版本號)

? ? ?一直以來工作中都沒有用到過gulp,所以一直沒花時間去看,前段時間做公司年會項目的時候,因為是微信端的網頁應用,需要在手機上運行,但是手機的緩存會導致每次修改的代碼沒有生效,于是每次修改了css和js都要重新修改對應的css和js的版本號,特別麻煩,于是開始學習gulp,網上與gulp相關的文章寫的都不太清楚,所以一直看不明白。綜合自己看到的幾篇文章,結合自己的理解之后,重新寫了一篇,希望對大家有所幫助,文章中有不正確的地方,歡迎批評指正!

1、安裝nodejs;

2、新建package.json文件;

3、全局和本地安裝gulp;

4、安裝gulp插件;

5、新建gulpfile.js文件;

6、通過命令提示符運行gulp任務。


一、安裝nodejs

https://nodejs.org/en/選擇對應的版本下載

二、使用命令行

node -v查看安裝的nodejs版本,出現版本號,說明剛剛已正確安裝nodejs。PS:未能出現版本號,請嘗試注銷電腦重試;

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

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

dir列出文件列表;

cls清空命令提示符窗口內容

新建項目工程gulp_web(可以自定義其他名稱),原文件夾的名稱為assets

壓縮后的文件夾的名稱為build

在命令行打開gulp_web文件夾所在的路徑,執行下圖所示操作

三、全局安裝gulp

1、說明:全局安裝gulp目的是為了通過她執行gulp任務;

2、安裝:命令提示符執行cnpm install gulp -g;(npm安裝有問題可以換成cnpm,cnpm安裝過程自行百度)

3、查看是否正確安裝:命令提示符執行gulp -v,出現版本號即為正確安裝。

安裝gulp的時候,可能會提示gulp安裝失敗,如圖所示,遇到這個問題,可能是node的版本過低,重新安裝下node的最新版本

四、新建package.json文件

1、說明:package.json是基于nodejs項目必不可少的配置文件,它是存放在項目根目錄的普通json文件;

2、它是這樣一個json文件(注意:json文件內是不能寫注釋的,復制下列內容請刪除注釋):

{

??"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"

??}

}

3、當然我們可以手動新建這個配置文件,命令提示符執行cnpm init

五、本地安裝gulp插件

接著開始本地安裝gulp各種插件,在這里找你需要的插件。有四個是用得最多的,必備的

1、語法檢查 ? (gulp-jshint)

2、合并文件 ? (gulp-concat)

3、壓縮代碼 ? (gulp-uglify)

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

常用插件安裝步驟:

本示例以gulp-less為例(編譯less文件),命令提示符執行cnpm install gulp-less --save-dev

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

cnpm install gulp --save-dev

cnpm install gulp-sass --save-dev

cnpm install gulp-concat --save-dev;多個文件合并為一個

cnpm install gulp-minify-css --save-dev;將CSS壓縮處理成一行(以前的寫法)

cnpm install gulp-clean-css --save-dev;將CSS壓縮處理成一行(現在常用gulp-clean-css)

cnpm install gulp-uglify --save-dev;生產環境下將JS壓縮處理成一行

cnpm install gulp-sourcemaps --save-dev

cnpm install gulp-smushit --save-dev;圖片壓縮

npm install gulp-rev --save-dev;對文件名加MD5后綴

cnpm install gulp-rev-collector --save-dev;路徑替換

cnpm install run-sequence --save-dev

cnpm install del --save-dev

安裝過程如下圖

--save-dev 是可以省掉你手動修改package.json文件的步驟,正常情況下得連同版本號手動將他們添加到模塊配置文件package.json中的依賴里

安裝成功后的插件在package.json文件的devDependencies中可以看到,如下圖

PS:細心的你可能會發現,我們全局安裝了gulp,項目也安裝了gulp,全局安裝gulp是為了執行gulp任務,本地安裝gulp則是為了調用gulp插件的功能。

更改gulp-rev和gulp-rev-collector(重要)

1.打開node_modules\gulp-rev\index.js

? 第135行: manifest[originalFile] = revisionedFile;

? 更新為: manifest[originalFile] = originalFile + '?v=' + file.revHash;

2.打開node_modules\rev-path\nodemodules\rev-path\index.js

第9行:return?modifyFilename(pth,?(filename,?ext)?=>?`${filename}-${hash}${ext}`);

更新為:?returnmodifyFilename(pth,?(filename,?ext)?=>`${filename}${ext}`);

3.打開node_modules\gulp-rev-collector\index.js

第40行:?var?cleanReplacement?=? path.basename(json[key]).replace(new?RegExp(?opts.revSuffix?),?''?);

更新為:?var?cleanReplacement?=path.basename(json[key]).split('?')[0];

安裝配置完成,要開始寫代碼啦。

六、新建gulpfile.js文件(非常重要)

在項目目錄gulp_web下新建gulpfile.js文件,gulp有五種方法:task,run,watch,src,和dest.

說明:gulpfile.js是gulp項目的配置文件,是位于項目根目錄的普通js文件(其實將gulpfile.js放入其他文件夾下亦可)

它的內容大致是這樣的,如下:

//?引入?gulp

var?gulp?=?require('gulp');

//?引入組件

var?cssminify?=?require('gulp-minify-css');//?壓縮CSS

var?uglify?=?require('gulp-uglify');//?生產環境下壓縮JS

var?smushit?=?require('gulp-smushit');//?圖片壓縮

var?rev?=?require('gulp-rev');//?對文件名加MD5后綴(版本號)

var?revCollector?=?require('gulp-rev-collector');//?路徑替換

var?runSequence?=?require('run-sequence');

var?del?=?require('del');

//?創建一個名為css的任務

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

return?gulp.src('./asset/css/*.css')//?該任務針對的css文件

? ? ? ?.pipe(cssminify())//?將css壓縮處理成一行

? ? ? ?.pipe(rev())//?文件名加MD5后綴

? ? ? ?.pipe(gulp.dest('./build/css'))//?生成到根目錄build文件夾下

? ? ? ?.pipe(rev.manifest())//?生成一個rev-manifest.json

? ? ? ?.pipe(gulp.dest('./rev/revcss'));//?將rev-manifest.json保存到revcss目錄內

});

//?創建一個名為script的任務

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

return?gulp.src('./asset/scripts/app/*.js')//?獲取全部的js文件? ? ?

? ? ? ?.pipe(uglify())//?生產環境下將JS壓縮處理成一行

? ? ? ?.pipe(rev())//?文件名加MD5后綴

? ? ? ?.pipe(gulp.dest('./build/scripts/app'))//?生成到根目錄build文件夾下

? ? ? ?.pipe(rev.manifest())//?生成一個rev-manifest.json

? ? ? ?.pipe(gulp.dest('./rev/revjs'));//?將rev-manifest.json保存到revjs目錄內

});

gulp.task('revHtml',function?()?{

return?gulp.src(['./rev/**/*.json','./asset/view/*.html'])//?讀取rev-manifest.json文件以及需要進行css名替換的文件

? ? ? ?.pipe(revCollector())//?執行文件內css名和js名的替換

? ? ? ?.pipe(gulp.dest('./build/view'));//?替換后的文件輸出的目錄,Html更換css、js文件版本

});

//?在樣式文件中修改的內容一旦保存可以直接在顯示器顯示渲染效果,無需刷新瀏覽器,這就是watch的功能。

gulp.task('watch',function?()?{

gulp.watch(['./asset/css/*.css'],?['css']);

gulp.watch(['./asset/scripts/app/*.js'],?['script']);

gulp.watch(['./rev/**/*.json','./asset/view/*.html'],?['revHtml']);

});

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

condition?=false;

runSequence(

['css'],

['script'],

['revHtml'],

['watch'],

done);

});

//?執行命令gulp?clean

gulp.task('clean',function?(cb)?{

del([

//?這里我們使用一個通配模式來匹配?文件夾中的所有東西

? ? ? ?'./build/css/*',

'./build/scripts/app/*',

? ? ? ?'./build/view/*'

? ?],?cb);

});

//?執行命令gulp

gulp.task('default',?['dev']);

完成以上配置,現在開始寫你的代碼啦!代碼寫完再執行下面的七。

七、運行gulp

1、說明:命令提示符執行gulp 任務名稱

2、gulp clean?清空生成的文件

3、當執行gulp default或gulp將會調用default任務里的所有任務

八、使用webstorm運行gulp任務或者命令提示符執行gulp

1、說明:使用webstorm可視化運行gulp任務;

2、使用方法:將項目導入webstorm,右鍵gulpfile.js 選擇”Show Gulp Tasks”打開Gulp窗口,若出現”No task found”,選擇右鍵”Reload tasks”,雙擊運行即可。


踩過的坑:

來談談我遇到的一點小小的坑。

  代碼敲完,需要回到命令行,運行gulp。直接輸入gulp,就開始運行,期間會報一些error,不要緊張,指的是js文件里一些語法錯誤,無傷大雅,成功創建出壓縮文件才是最終目的。

? ? ? ? 那么如果需要修改代碼,必須一直把cmd控制臺保持打開狀態,否則無法執行watch操作。第一點坑,就是編輯器的自動保存功能,一行代碼如果寫的不順,或是中途打岔,比如‘$scope.’,還沒接著寫完,編輯器自動保存的功能會使jshint檢查出語法錯誤,導致gulp的停止運行。

如果用的是webstrom編輯器的,可以不用每次打開命令行,右鍵選中gulpfile.js,show gulp tasks,再點擊default即可。

操作過程中,我遇到的第二個坑就是安裝gulp插件。由于我的電腦以前就安裝過node,所以沒有重新安裝,導致運行cnpm install gulp --save-dev的時候,一直安裝gulp報錯,后來重新安裝了最新版的node之后,再運行cnpm install gulp --save-dev就可以成功安裝gulp了。

遇到的第三個坑就是添加版本號,找了好幾篇文章都說的不清楚,研究了好久才成功,以上我的代碼是經過自己驗證過才貼上去的,可以達到當修改asset里面的css和js,同步改變build里面的css和js的目的,同時會使得html里面的版本號發生改變,可解決緩存問題。

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

推薦閱讀更多精彩內容