Gulp-rev-all在每次运行时连接哈希

时间:2018-10-05 01:20:32

标签: caching gulp browser-cache gulp-rev

使用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,并且我可以对文件进行哈希处理,更新其引用,但无法删除“旧的散列”文件。我可以根据需要放置代码。

谢谢您的时间!

0 个答案:

没有答案