gulp 添加糙臼、更新靜態(tài)文件版本號

1庐镐,說明:使用gulp為js和css靜態(tài)文件添加版本號,升級服務器代碼后变逃,可以不用強制更新瀏覽器或清空緩存必逆,優(yōu)化用戶體驗。

????本文主要參考http://www.jb51.net/article/100652.htm揽乱, 但是遇到一些小坑名眉,特此記錄

2,預期效果:在原目錄結(jié)構(gòu)下html文件代碼

<link href ="../css/index.css?v=8f204d4">

3凰棉,實現(xiàn)方法:

前提:需要安裝node.js

1损拢、安裝gulp和gulp插件

打開node命令行,cd 進入到項目根文件夾(若安裝失敗撒犀,推薦國內(nèi)的淘寶npm鏡像福压,教程:https://blog.csdn.net/quuqu/article/details/64121812掏秩,使用方法將npm改為cnpm)

npm install --save-dev gulp

npm install --save-dev gulp-rev

npm install --save-dev gulp-rev-collector

npm install --save-dev gulp-asset-rev

npm install --save-dev run-sequence

項目結(jié)構(gòu)目錄為:


2、編寫gulpfile.js

筆者是在templates文件夾( 存放html代碼 )同級文件夾內(nèi)創(chuàng)建的gulpfile.js

//引入gulp和gulp插件荆姆,

var gulp = require('gulp'),

??assetRev = require('gulp-asset-rev'),

??runSequence = require('run-sequence'),

??rev = require('gulp-rev'),

??revCollector = require('gulp-rev-collector');


//定義css蒙幻、js源文件路徑

var cssSrc = 'css/*.css', ?// 注意這里修改為你的源文件路徑,例如筆者的項目css文件胆筒,設置為 static/css/main/*.css 邮破,js同理。

??jsSrc = 'js/*.js';


//為css中引入的圖片/字體等添加hash編碼

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

??return gulp.src(cssSrc)? //該任務針對的文件

???.pipe(assetRev()) //該任務調(diào)用的模塊

???.pipe(gulp.dest('src/css')); //編譯后的路徑

});


//CSS生成文件hash編碼并生成 rev-manifest.json文件名對照映射

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

??return gulp.src(cssSrc)

????.pipe(rev())

????.pipe(rev.manifest())

????.pipe(gulp.dest('rev/css'));

});


//js生成文件hash編碼并生成 rev-manifest.json文件名對照映射

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

??return gulp.src(jsSrc)

????.pipe(rev())

????.pipe(rev.manifest())

????.pipe(gulp.dest('rev/js'));

});


//Html替換css腐泻、js文件版本

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

??return gulp.src(['rev/**/*.json', 'View/*.html']) // 這里的View/*.html是項目html文件路徑决乎,如果gulpfile.js和html文件同在一級目錄下,修改為return gulp.src(['rev/**/*.json', '*.html']);

????.pipe(revCollector())

????.pipe(gulp.dest('View'));// 注意這里是生成的新的html文件派桩,如果設置為你的項目html文件所在文件夾,會覆蓋舊的html文件蚌斩,若上面的View/*.html修改了铆惑,這里也要相應修改,如果gulpfile.js和html文件同在一級目錄下送膳,修改為??.pipe(gulp.dest(''));

});


//開發(fā)構(gòu)建

gulp.task('default', function(done) {

??condition = false;

??runSequence(??? //需要說明的是员魏,用gulp.run也可以實現(xiàn)以上所有任務的執(zhí)行,只是gulp.run是最大限度的并行執(zhí)行這些任務叠聋,而在添加版本號時需要串行執(zhí)行(順序執(zhí)行)這些任務撕阎,故使用了runSequence.

????['assetRev'],

????['revCss'],

????['revJs'],

????['revHtml'],

????done);

});

3,修改插件

原文到了這里執(zhí)行gulp查看更新效果碌补,建議先不要執(zhí)行虏束。修改完成后再執(zhí)行。

-- 1?

打開node_modules\gulp-rev\index.js

134行:

manifest[originalFile] = revisionedFile;

更新為:

manifest[originalFile] = originalFile + '?v=' + file.revHash;

-- 2?

打開?node_modules\rev-path\index.js ?

注意:原文這里的路徑是打開nodemodules\gulp-rev\nodemodules\rev-path\index.js厦章,根據(jù)你的具體情況進行修改镇匀。

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

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

17行 return modifyFilename(pth, (filename, ext) => filename.replace(new RegExp(`-${hash}$`), '') + ext);

更新為: return modifyFilename(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];

-- 4

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

78行 var verStr = (options.verConnecter || "-") + md5;

更新為:var verStr = (options.verConnecter || "") + md5;

80行 src = src.replace(verStr, '').replace(/(\.[^\.]+)$/, verStr + "$1");

更新為:src=src+"?v="+verStr;

-- 5、更改gulp-rev-collector

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

第173行

regexp: new RegExp( prefixDelim?+ pattern, 'g' ),

更新為 regexp: new RegExp( prefixDelim + pattern + '(\\?v=\\w{10})?', 'g' ),


4袜啃,執(zhí)行gulp

1 執(zhí)行gulp汗侵,查看html文件是否正確添加版本號。


2 每次更新完代碼群发,執(zhí)行gulp晰韵,再更新到服務器上即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熟妓,一起剝皮案震驚了整個濱河市雪猪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滑蚯,老刑警劉巖浪蹂,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抵栈,死亡現(xiàn)場離奇詭異,居然都是意外死亡坤次,警方通過查閱死者的電腦和手機古劲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缰猴,“玉大人产艾,你說我怎么就攤上這事』蓿” “怎么了闷堡?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疑故。 經(jīng)常有香客問我杠览,道長,這世上最難降的妖魔是什么纵势? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任踱阿,我火速辦了婚禮,結(jié)果婚禮上钦铁,老公的妹妹穿的比我還像新娘软舌。我一直安慰自己牛曹,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布黎比。 她就那樣靜靜地躺著超营,像睡著了一般焰手。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上书妻,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音躲履,去河邊找鬼见间。 笑死工猜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的篷帅。 我是一名探鬼主播史侣,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惊橱!你這毒婦竟也來了蚪腐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤税朴,失蹤者是張志新(化名)和其女友劉穎回季,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體正林,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡泡一,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了觅廓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼻忠。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杈绸,靈堂內(nèi)的尸體忽然破棺而出粥烁,到底是詐尸還是另有隱情,我是刑警寧澤蝇棉,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站芥永,受9級特大地震影響篡殷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埋涧,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一板辽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棘催,春花似錦劲弦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呼猪,卻和暖如春画畅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宋距。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工轴踱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谚赎。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓淫僻,卻偏偏與公主長得像诱篷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雳灵,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355