gulp插件-gulp-rev和gulp-rev-collector

1.gulp-rev: 為靜態(tài)文件隨機添加一串hash值, 解決cdn緩存問題, a.css --> a-d2f3f35d3.css
API:
rev.manifest.json: 生成源文件和添加hash后文件的映射

安裝: npm install --save-dev gulp-rev

使用:
var gulp = require('gulp')
var rev = require('gulp-rev')

gulp.task('rev', function(){
    gulp.src('src/*.css')
          .pipe(rev())//添加hash后綴
          .pipe(gulp.dest('dist/css'))//移動到dist/css
          .pipe(rev.manifest())//生成文件映射
          .pipe(gulp.dest('rev/css'))//將映射文件導出到rev/css
})

gulp-rev插件只能添加后綴, 不能講html里的路徑替換, 如果想要替換路徑, 就需要gulp-rev-collector

2.gulp-rev-collector: 根據rev生成的manifest.json文件中的映射, 去替換文件名稱, 也可以替換路徑

安裝: npm install --save-dev gulp-run-collector

使用:
var gulp = require('gulp');
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');
var runSequence = require('run-sequence');
var clean = require('gulp-clean')

gulp.task('css', function() {
    return gulp.src('src/css/*.css')
        .pipe(rev())
        .pipe(gulp.dest('dist/css'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/css'));
});

gulp.task('js', function() {
    return gulp.src('src/js/*.js')
        .pipe(rev())
        .pipe(gulp.dest('dist/js'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/js'));
});

gulp.task('rev', function() {
    return gulp.src(['rev/**/*.json', 'src/app/*.html'])
        .pipe(revCollector({
            replaceReved: true,//允許替換, 已經被替換過的文件
            dirReplacements: {
                'css': '/dist/css',
                'js': '/dist/js'
            }
        }))
        .pipe(gulp.dest('dist'));
});

gulp.task('clean', function(){
    return gulp.src(['dist', 'rev'])
        .pipe(clean());
});
gulp.task('build', function(cb) {
    runSequence('clean', ['css', 'js'], 'rev', cb);
});

對插件源碼做一些小的修改, 就可以將a-5da2910089.css模式轉變成更加方便的-5da2910089模式

第一步: 進入/node_modules/gulp-rev/index.js修改代碼:
將return through.obj((file, enc, cb) => {
        // Ignore all non-rev'd files
        if (!file.path || !file.revOrigPath) {
            cb();
            return;
        }

        const revisionedFile = relPath(path.resolve(file.cwd, file.base), path.resolve(file.cwd, file.path));
        const originalFile = path.join(path.dirname(revisionedFile), path.basename(file.revOrigPath)).replace(/\\/g, '/');

        manifest[originalFile] = revisionedFile;//這段刪除
                manifest[originalFile] = originalFile + '?v=' + file.revHash;//這段添加
        cb();
    }


第二步: 進入/node_modules/rev-path/index.js修改代碼:
將第一個函數中的:return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`); 里邊的-${hash}刪掉;
將第一個函數中的:return modifyFilename(pth, (filename, ext) => filename.replace(new RegExp(`-${hash}$`), '')  + ext); 里邊的.replace(new RegExp(`-${hash}$`), '') 刪掉;

第三步: 進入/node_modules/gulp-rev-collector/index.js修改代碼:(更改兩處)
1) 140 和 160行
      // regexp: new RegExp(  dirRule.dirRX + pattern, 'g' ),//刪除這段
      regexp: new RegExp( dirRule.dirRX  + pattern+'(\\?v=\\w{10})?', 'g' ),//添加這段
 // regexp: new RegExp( prefixDelim + pattern, 'g' ),//刪除這段
  regexp: new RegExp( prefixDelim + pattern + '(\\?v=\\w{10})?', 'g' ),//添加這段

2)  40行
   // var cleanReplacement =  path.basename(json[key]).replace(new RegExp(   opts.revSuffix ), '' );//刪除
    var cleanReplacement = path.basename(json[key]).split('?')[0];//添加
    
    
                           
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市病毡,隨后出現的幾起案子饵撑,更是在濱河造成了極大的恐慌姑蓝,老刑警劉巖俱济,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吨铸,死亡現場離奇詭異抖所,居然都是意外死亡梨州,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門田轧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暴匠,“玉大人,你說我怎么就攤上這事傻粘∶拷眩” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵弦悉,是天一觀的道長窒典。 經常有香客問我,道長稽莉,這世上最難降的妖魔是什么崇败? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上后室,老公的妹妹穿的比我還像新娘缩膝。我一直安慰自己,他們只是感情好岸霹,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布疾层。 她就那樣靜靜地躺著,像睡著了一般贡避。 火紅的嫁衣襯著肌膚如雪痛黎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天刮吧,我揣著相機與錄音湖饱,去河邊找鬼。 笑死杀捻,一個胖子當著我的面吹牛井厌,可吹牛的內容都是我干的。 我是一名探鬼主播致讥,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仅仆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了垢袱?” 一聲冷哼從身側響起墓拜,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎请契,沒想到半個月后咳榜,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡爽锥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年贿衍,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片救恨。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖释树,靈堂內的尸體忽然破棺而出肠槽,到底是詐尸還是另有隱情,我是刑警寧澤奢啥,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布秸仙,位于F島的核電站,受9級特大地震影響桩盲,放射性物質發(fā)生泄漏寂纪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捞蛋。 院中可真熱鬧孝冒,春花似錦、人聲如沸拟杉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搬设。三九已至穴店,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拿穴,已是汗流浹背泣洞。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留默色,地道東北人球凰。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像该窗,于是被迫代替她去往敵國和親弟蚀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容