#javascript #ecmascript-6 #gulp #gulp-rev
#javascript #ecmascript-6 #gulp #gulp-rev
Вопрос:
У меня есть несколько файлов, в которых мне нужно переименовать хэшированный css из manifest.json, но, похоже, я не могу заставить его работать.
Я попытался создать массив с несколькими источниками и адресатами, но я думаю, что я что-то упускаю. По сути, я хочу, чтобы он изменял значения в нескольких файлах в соответствии с конкретными файлами css из manifest.json.
import gulp from 'gulp';
import mergeStream from 'merge-stream';
import rev from 'gulp-rev';
import revRewrite from 'gulp-rev-rewrite';
import revDelete from 'gulp-rev-delete-original';
import { hashFiles, hashReplace } from './hashTask.config';
// imported arrays here for you to see ////
// Paths to hash all the files to bust the cache
const hashFiles = [
'./css/**/*.css',
'../../../../com-holding-page/css/*.css',
'!./css/lib/**'
];
const hashReplace = [
{ src : '../../../../com-holding-page/index.html', dest : '../../../../com-holding-page/' },
{ src : '../../../../app/design/frontend/test/default/template/page/html/head.phtml', dest : '../../../../app/design/frontend/test/default/template/page/html/' },
{ src : '../../../../app/design/frontend/test/default/layout/local.xml', dest : '../../../../app/design/frontend/test/default/layout/' }
];
//////////
const hashTask = () => {
return gulp.src(hashFiles, {base: 'css'})
.pipe(rev())
.pipe(revDelete()) // Remove the unrevved files
.pipe(gulp.dest('./css/'))
.pipe(rev.manifest('rev-manifest.json', {
merge: true // Merge with the existing manifest if one exists
}))
.pipe(gulp.dest('./css/'))
};
const hashIncludes = () => {
const manifest = gulp.src('./css/rev-manifest.json');
return mergeStream(
hashReplace
.map( (file) => {
return gulp.src(file.src)
.pipe(revRewrite({
manifest: manifest,
replaceInExtensions: ['.html', '.phtml', '.xml']
}))
.pipe(gulp.dest(file.dest));
})
);
};
export { hashTask, hashIncludes };
Комментарии:
1. Вы получаете сообщение об ошибке?
2. Нет, он записывает в ../ ../ ../ ../com-holding-page/index.html и это все, но использует неверную ссылку на хеширование.
3. Неверно в каком смысле? Какую «ссылку на хеширование» он использует и какой она должна быть вместо этого?
Ответ №1:
изменить
const manifest = gulp.src('./css/rev-manifest.json');
к этому
const { readFileSync } = require('fs'); // import this in header
// replace the below line of code with your code and make sure the rev-manifest file path is correct
const manifest = readFileSync('./rev-manifest.json'); // my rev file path points to the root of the project folder