避免模板缓存的最佳方法是修改文件。
由于您使用的是gulp,因此您可以使用gulp-rev 或gulp-rev-all 修改您的文件。
什么是修订?
通过将内容哈希附加到文件名 unicorn.css → unicorn-d41d8cd98f.css 来修改静态资产。
即,在每次构建时,文件名都会更改,这样可以避免模板缓存。
您可以修改每个文件,包括.html、.css、.js、images、videos 等。
由于gulp-rev-all 是最新的并从gulp-rev 分叉,所以我们只讨论gulp-rev-all。
使用gulp-rev-all进行修订:
var revAll = require('gulp-rev-all');
如果你想忽略一些文件的修订,你可以这样做。
var rev = new revAll({dontRenameFile: [/^\/favicon.ico$/g, /^\/index.html/g]})
考虑您的所有文件都在文件夹dist 中,并将新修订的文件保存在文件夹www 中。(您也可以将它们保存在dist 中。考虑到www 是您的构建目录。)
return gulp.src('dist/**')
.pipe(rev.revision())
.pipe(gulp.dest('www'))
接下来,创建一个manifest 文件以将您的文件映射到修订后的文件。为此使用 .manifestFile() 函数。它返回一个转换函数,该函数将过滤掉任何通过管道的现有文件,并发出一个新的清单文件。必须在 .revision() 之后调用。
.pipe(rev.manifest())
.pipe(gulp.dest('www/manifest'));
将原始路径映射到修订路径的资产清单将写入www/manifest/rev-manifest.json:
{
"css/unicorn.css": "css/unicorn.098f6bcd.css",
"js/unicorn.js": "js/unicorn.273c2cin.js"
.....
.....
}
完整代码:
gulp.task('rev', () => {
var revAll = require('gulp-rev-all'),
rev = new revAll({dontRenameFile: [/^\/favicon.ico$/g, /^\/index.html/g]});
return gulp.src('dist/**')
.pipe(rev.revision())
.pipe(gulp.dest('www'))
.pipe(rev.manifest())
.pipe(gulp.dest('www/manifest'));
});
阅读更多关于gulp-rev-allhere