Как заменить имена файлов внутри моего файла manifest.json, используя rev-replace

Я немного застрял - я хочу заменить имена файлов изображений на их хешированную версию в моем файле манифеста.

Манифест выглядит так:

{
"icons": [
    {
        "src": "android-chrome-192x192.png",
        "sizes": "192x192",
        "type": "image/png"
    },
    {
        "src": "android-chrome-512x512.png",
        "sizes": "512x512",
        "type": "image/png"
    }
]
}

Я хочу, чтобы значок src был заменен хэшированными именами файлов, которые выглядят так: "android-chrome-192x192-b03df0131.png"

Мой файл gulp, который должен это сделать, выглядит так:

    const gutil = require('gulp-util');

module.exports = function (gulp, plugins) {
    return function () {
        const manifest = gulp.src('public/dist/rev-manifest.json');

        return gulp.src(['public/dist/@(css|js)/**','public/dist/img/icon/**.json'])
            .pipe(plugins.revReplace({replaceInExtentions: ['.json']}))
            .pipe(plugins.revReplace({manifest: manifest}))
            .pipe(gulp.dest('public/dist'));
    };
};

1 ответ

Решение

После долгих поисков и поисков документации я начал работать:D

Так что, если кто-то ищет это:

const gutil = require('gulp-util');

module.exports = function (gulp, plugins) {
    return function () {
        const manifest = gulp.src('public/dist/rev-manifest.json');

        function replaceIconPath(filename) {
            if(filename.includes('android-chrome-')) {
                return filename.replace('img/icon/', '');
            }

            return filename;
        }

        return gulp.src('public/dist/@(css|js|img)/**')
            .pipe(plugins.revReplace({
                replaceInExtensions: ['.json', '.css', '.js', '.html', '.hbs'],
                manifest: manifest,
                modifyUnreved: replaceIconPath,
                modifyReved: replaceIconPath
            }))
            .pipe(gulp.dest('public/dist'));
    };
};

Итак, позвольте мне объяснить это вкратце - важная часть находится в plugins.revReplace.

Вам нужна опция replaceInExtension и добавить ".json", но вам также нужно указать параметры по умолчанию, иначе они будут потеряны.

Опции 'modifiyUnreved' и 'modifyReved' просто необходимы, если вам необходимо изменить имена файлов дальше. В моем случае он не смог найти файл, потому что мой rev-manifest находился на другом уровне по сравнению с моим файлом манифеста. Поэтому мне нужно было обрезать путь, чтобы найти src и заменить его.

Другие вопросы по тегам