gulp-rev-all插件用法详解

1、作用及基本用法

  • 作用
    将静态文件加个戳,这个戳是这个文件的hash,例如
    reset.css转化为reset.098f6bcd.css,只是加个戳,内容不会改变,常用于缓存管理。
  • 基本用法
var gulp = require('gulp');
var RevAll = require('gulp-rev-all');

gulp.task('default', function () {
  gulp
    .src('dist/**')
    .pipe(RevAll.revision())
    .pipe(gulp.dest('cdn'));
});
  • 与gulp-rev的区别
    假如一个CSS文件引用一个图片,当这个图片内容被改了,那么用gulp-rev打的CSS戳不会改变;但用gulp-rev-all会。后者不仅处理当前文件hash,对其所依赖的其它资源也会进行计算。所以比gulp-rev更加强大。

2、方法(即RevAll可以调用的)

  • .revision({options})
    最主要的方法,用它根据文件内容生成hash,并进行重命名

  • .manifestFile()
    对原始文件和打包后的文件生成一个Map,其实用处不大。必须在revision之后调用。

// 生成的 rev-manifest.json
{
  "css/unicorn.css": "css/unicorn.098f6bcd.css",
  "js/unicorn.js": "js/unicorn.273c2cin.js"
}
  • .versionFile()
    和manifestFile的区别在于,versionFile是对所有的依赖文件生成一个hash和一个时间戳。必须在revision之后调用
// rev-version.json
{
  "hash": "c969a1154f2a5c0689d8ec4b0eafd584",
  "timestamp": "2014-10-11T12:13:48.466Z"
}

// 一个完整的例子
var gulp = require('gulp');
var RevAll = require('gulp-rev-all');
 
gulp.task('default', function () {
  return gulp
    .src(['assets/**'])
    .pipe(gulp.dest('build/assets'))  
    .pipe(RevAll.revision())
    .pipe(gulp.dest('build/assets'))  
    .pipe(RevAll.versionFile())
    .pipe(gulp.dest('build/assets'))
    .pipe(RevAll.manifestFile())
    .pipe(gulp.dest('build/assets')); 
});

3、Options

执行revision时可以配置的参数。

  • fileNameVersion
    设置revAll.versionFile()产生的文件名称,默认rev-version.json
  • fileNameManifest
    设置revAll.manifestFile()产生的文件名称,默认rev-manifest.json
  • includeFilesInManifest
    指定rev-manifest.json中可以有哪些类型,即不是对所有文件都生成一个Map,默认['.css', '.js']
  • dontGlobal
    设置哪些文件可以不被重命名、不被搜索、不被更新等,例如一般不对html文件追加hash。可使用正则,默认[ /^/favicon.ico$/ ]
  • dontRenameFile
    设置哪些文件不被重命名,例如html文件,与dontGlobal的区别是dontGlobal设置的是哪些文件不被搜索到,即对某个符合规则的文件或文件夹不做任何处理;dontRenameFile只是不被重命名,其内容及其依赖还是会被处理的。默认值[]
  • dontUpdateReference
  • dontSearchFile
  • hashLength
    追加的hash的长度,默认是8
  • prefix
    html文件的css,js地址一般是相对路径,用此参数可配置前缀,一般用于设置CDN的前缀。
  • transformPath
    将路径中的一部分替换掉
gulp.task('default', function () {
 
  gulp
    .src('dist/**')
    .pipe(RevAll.revision({
      transformPath: function (rev, source, path) {
      // on the remote server, image files are served from `/images` 
      return rev.replace('/img', '/images');
      }
    }))
    .pipe(gulp.dest('cdn'))
 
});
  • transformFilename
    改变默认的命名规则(文件名+hash+后缀 可修改顺序)
gulp.task('default', function () {
 
  gulp
    .src('dist/**')
    .pipe(RevAll.revision({
      transformFilename: function (file, hash) {
        var ext = path.extname(file.path);
        return hash.substr(0, 5) + '.'  + path.basename(file.path, ext) + ext; // 3410c.filename.ext 
      }
    }))
    .pipe(gulp.dest('cdn'))
    
});
  • debug
    该插件工作时打出的日志。

你可能感兴趣的:(gulp-rev-all插件用法详解)