gulp給文件加版本號

版本號用文件MD5生成javascript

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

因此當沒有改變文件的時候,咱們就不能用gulp來改變版本號了html

 

須要安裝的插件java

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代碼node

//引入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);
});

 

三、更改gulp-rev和gulp-rev-collector
npm

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

第144行 manifest[originalFile] = revisionedFile;
gulp

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

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

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;

 

四、繼續更改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,發現版本號又改變了

相關文章
相關標籤/搜索