使用gulp-rev-all和gulp-rev-delete-original插件时,我面临以下问题:
每次我运行下面的代码时,我都会在文件路径上获得串联的文件名,例如:
第一个吞咽运行:CategoriesIcon.js --->转换为categoryIcon.c7eab21d.js
第二次吞咽运行:CategoriesIcon.c7eab21d.js --->转换为categoryIcon.c7eab21d.c7eab21d.js(如果文件内容已更改,则转换为categoryIcon.c7eab21d.ae32ea11.js)
依此类推...
我想要的是,如果我第一次运行代码,我将获得categoryIcon.c7eab21d.js,如果文件内容未更改,则将获得第二次:CategoriesIcon.c7eab21d.js,并且文件已更改CategoriesIcon.a32ae53s.js,依此类推...我只想摆脱那些串联的哈希,并在文件名中获得唯一的哈希。
// Imports
const gulp = require('gulp');
const revDelete = require('gulp-rev-delete-original');
const revAll = require("gulp-rev-all");
gulp.task('cacheBusting-hashFiles', function(){
// Get files we want to hash (namefiles)
gulp.src([
'src/app/commons/components/**/*.{js,html}'
])
// Generates and concatenate a hash to the file names and update references
.pipe(revAll.revision())
// Delete files previous files without hash(**THIS IS NOT WORKING FOR SOME REASON**)
.pipe(revDelete())
// New hashed files destination
.pipe(gulp.dest('src/app/commons/components/'));
})
还尝试删除散列(如果已经存在),因此您将其删除并添加新的散列。它可以完美地完成所有工作(使用单个哈希创建一个新的哈希文件(即CategoriesIcon.847f13f5.js),但不会删除具有旧哈希的文件(即Categoriesicon.2d16f215.js),因此最终有2个文件不同的哈希值(categoriesIcon.847f13f5.js和Categoriesicon.2d16f215.js),在这种情况下,我认为这主要是因为重命名文件时,revDelete()指向旧文件(重命名之前)而不是指向重命名一个:
// Imports
const gulp = require('gulp');
const revDelete = require('gulp-rev-delete-original');
const revAll = require("gulp-rev-all");
const rename = require('gulp-regex-rename');
gulp.task('cacheBusting-hashFiles', function(){
// i.e.: Extracts .847f13f5 from categories.test1234.847f13f5
const filenameHashRegex = /.[a-f0-9]{8}$/;
// i.e.: Extracts .847f13f5 from categories.test1234.847f13f5.js
const fileHashRegex = /\.[a-f0-9]{8}(?=\.\w+$)/;
// Function that returns true if the filename has an old hash
let hasOldHash = function(file) {
const fileName = path.parse(file.path).name;
if(filenameHashRegex.test(fileName)){
console.log("***has old hash***");
return true;
}
};
// Get files we want to hash (namefiles)
gulp.src([
'src/app/commons/components/**/*.{js,html}'
])
// If filename already has a hash, removes it
.pipe(gulpif(hasOldHash, rename(filehashRegex, '')))
// Hash file and update references
.pipe(revAll.revision())
// Deletes unhashed old files (**THIS IS NOT WORKING FOR SOME REASON**)
.pipe(revDelete())
// Destination
.pipe(gulp.dest('src/app/commons/components/'));
});
注意:我也尝试过一起使用gulp-rev,gulp-rev-replace和gulp-rev-replace-original,并且我可以对文件进行哈希处理,更新其引用,但无法删除“旧的散列”文件。我可以根据需要放置代码。
谢谢您的时间!