Не могу заставить 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))
        ;
});

Это не ответ, который я хочу, но это ответ, который мне нужен.:)

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