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
该插件工作时打出的日志。