Не могу заставить gulp-rev-replace работать с gulp-useref
Продолжая мой предыдущий вопрос - но на этот раз следующий шаг: заставить работать ревизии файлов.
Я работаю над курсом Джонпапы по автоматизации с Gulp и, похоже, натолкнулся на другую стену (это то, что вы получаете, когда пытаетесь адаптировать краткий курс к другой файловой структуре:P).
По сути, проблема в том, что я получаю файлы с именами ревизий, но эти имена не попадают в конечный результат test.jsp
и я не могу понять, почему...
Это задача (для краткости минификация опущена, но она отлично работает с ревизией файла):
gulp.task('build-dev', ['inject'], function () {
var assets = $.useref.assets({searchPath: ''});
return gulp
.src(config.indexFile)
.pipe($.rename('test.jsp'))
.pipe($.plumber())
.pipe(assets)
.pipe($.rev())
.pipe(assets.restore())
.pipe($.useref())
.pipe($.revReplace({modifyUnreved: replaceDirectory, modifyReved: replaceDirectory}))
.pipe(gulp.dest(config.indexLocation))
.pipe($.rev.manifest())
.pipe(gulp.dest(config.indexLocation))
;
});
inject
это задача, которая вставляет css и js ссылки в индексный файл (работает правильно), $
является require('gulp-load-plugins')({lazy: true})
а также config.indexFile
является index.jsp
,
replaceDirectory
функция is (используется, поскольку rev-manifest генерирует полные пути):
function replaceDirectory(path) {
var strToReplace = '../..';
var strToReplaceWith = process.cwd().replace(/\\/g, '/') + '/WebContent';
if (path) {
return path.replace(strToReplace, strToReplaceWith);
} else {
return path;
}
}
Моя файловая структура (в отличие от той, что в курсе):
- ModuleDir
- dist
- css
- lib.css
- app.css
- fonts
- images
- js
- lib.js
- app.js
- css
- js
- web-app
- InnerDir
- index.jsp
- test.jsp
- package.json, bower.json, etc. (all the required files)
По сути, index.jsp обрабатывается для библиотечных и прикладных ресурсов CSS и JS, которые минимизируются и объединяются в lib.css, lib.js, app.css и app.js. Позже все это внедряется в копию index.jsp, которая называется test.jsp.
Сбор активов, конкатенация, инъекционные работы и редактирование файлов на диске великолепно работают. Обновление имен файлов в test.jsp
- не так много...
Любые идеи или указатели будут оценены.
2 ответа
Вы должны добавить replaceInExtensions: '.jsp'
к вашим вариантам для revReplace()
,
У меня была эта проблема в течение полутора дней, прежде чем я посмотрел на код плагина и понял его. Я использую.php файлы. Документация говорит, что вам нужно сделать это, но ее легко пропустить.
Надеюсь, поможет.
Тем временем (если я не найду источник проблемы или кто-то из вас может помочь), я выбрал другую схему очистки кэша:
gulp.task('build-dev', ['inject'], function () {
var assets = $.useref.assets({searchPath: ''});
var cb = Math.random();
return gulp
.src(config.indexFile)
.pipe($.rename('test.jsp'))
.pipe($.plumber())
.pipe(assets)
.pipe(assets.restore())
.pipe($.useref())
.pipe($.replace('dist/css/lib.css', 'dist/css/lib.css?cb=' + cb))
.pipe($.replace('dist/css/app.css', 'dist/css/app.css?cb=' + cb))
.pipe($.replace('dist/js/lib.js', 'dist/js/lib.css?cb=' + cb))
.pipe($.replace('dist/js/app.js', 'dist/js/app.js?cb=' + cb))
.pipe(gulp.dest(config.indexLocation))
;
});
Это не ответ, который я хочу, но это ответ, который мне нужен.:)