Gulp: заменить переменные в файле HTML на основе имени файла

Наш проект использует Gulp. Теперь у меня есть требование: у нас есть несколько HTML-файлов на уровне страницы, скажем, login.html а также my.html, Внутри этих оригинальных HTML-файлов есть переменная {{PAGE_TITLE}}, который должен быть заменен (на Gulp) быть "Login to System" а также "My Account" соответственно. Вот мой текущий сценарий:

gulp.task('pages', ['clean:tmp'], function () {
    var pageTitle = '';
    return gulp.src('/my/source/html/**/*.html')
        .pipe(tap(function (file, t) {
            pageTitle = /index.html$/.test(file.path) ? 'Login to System' : 'My Account';
        }))
        .pipe(replace(/{{PAGE_TITLE}}/g, pageTitle))
        .pipe(gulp.dest('/my/dest/'));
});

Получается переменная pageTitle никогда не устанавливается перед replace, Я искал документацию gulp-tap в течение сотен раз, но я до сих пор не знаю, как заставить это работать. Пожалуйста, помогите, спасибо.

Этот пост: Модифицируйте файл на месте (тот же адрес), используя Gulp.js, и шаблон глобализации пытается добиться того же эффекта, но он привел к какому-то другому решению.

1 ответ

Решение

Я разобрался с решением следующим образом:

gulp.task('pages', ['clean:tmp'], function () {

    function replaceDynamicVariables(file) {
        var pageTitle = /login.html$/.test(file.path) ? 'Login to System' : 'My Account';
        file.contents = new Buffer(String(file.contents)
            .replace(/{{PAGE_TITLE}}/, pageTitle)
        );
    }

    return gulp.src('/my/source/html/**/*.html')
        .pipe(tap(replaceDynamicVariables))
        .pipe(gulp.dest('/my/dest/'));
});
Другие вопросы по тегам