gulp給文件加版本號


版本號用文件MD5生成

默認根據文件MD5生成,因此文件未發生改變,此版本號將不會變

所以當沒有改變文件的時候,我們就不能用gulp來改變版本號了

 

需要安裝的插件

1 npm install --save-dev gulp
2 npm install --save-dev gulp-rev
3 npm install --save-dev gulp-rev-collector
4 npm install --save-dev gulp-asset-rev
5 npm install --save-dev run-sequence

 

 

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',
  jsSrc = 'js/*.js';
 
//為css中引入的圖片/字體等添加hash編碼
gulp.task('assetRev', function(){
  return gulp.src(cssSrc)  //該任務針對的文件
   .pipe(assetRev()) //該任務調用的模塊
   .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'])
    .pipe(revCollector())
    .pipe(gulp.dest('View'));
});
 
 
//開發構建
gulp.task('default', function (done) {
  condition = false;
  runSequence(    //需要說明的是,用gulp.run也可以實現以上所有任務的執行,只是gulp.run是最大限度的並行執行這些任務,而在添加版本號時需要串行執行(順序執行)這些任務,故使用了runSequence.
    ['assetRev'],
    ['revCss'],
    ['revJs'],
    ['revHtml'],
    done);
});

 

3、更改gulp-rev和gulp-rev-collector

打開node_modules\gulp-rev\index.js

第144行 manifest[originalFile] = revisionedFile;

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

打開node_modules\rev-path\index.js

10行 return filename + '-' + hash + ext;

更新為: return filename + ext;

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

31行 if ( !_.isString(json[key]) || path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ) !==  path.basename(key) ) {

更新為: if ( !_.isString(json[key]) || path.basename(json[key]).split('?')[0] !== path.basename(key) ) {

打開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;

 

4、繼續更改gulp-rev-collector

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

第107行 regexp: new RegExp( '([\/\\\\\'"])' + pattern, 'g' ),

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

 

再次運行就能成功了

改變單個文件的內容,再次運行gulp,發現版本號又改變了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM