Как загрузить содержимое внешнего файла в gulp browser-sync

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

Причина, по которой я хочу загрузить условия поиска и замены из отдельного файла, заключается в том, что я хочу использовать gulp-watch и перезагружать синхронизацию браузера по мере обновления условий поиска и замены.

Папка моего проекта:

  • regex/search.txt ‹- поисковый запрос хранится в этом файле
  • regex/replace.txt ‹- термин замены хранится в этом файле
  • gulpfile.js

Содержимое gulpfile.js:

var gulp = require('gulp'),
fs = require("fs"),
browserSync = require('browser-sync');

var proj_url = "http://www.example.com";
var search_text = "";
var replace_text = "";

gulp.task('readRegEx', function() {
    return gulp.src('regex/*.txt')
    .pipe(fs.readFile("regex/search.txt", "utf-8", function(err, data) {
        search_text = data;
    }))
    .pipe(fs.readFile("regex/replace.txt", "utf-8", function(err, data) {
        replace_text = data;
    }))
});

gulp.task('browser-sync', function() {
    browserSync({
        proxy: {
            target: proj_url
        },
        rewriteRules: [
            {
                match: search_text,
                fn: function (match) {
                    return replace_text;
                }
            }
        ]
    });
});

gulp.task('default', ['readRegEx','browser-sync'], function() {
    gulp.watch(['regex/*.txt'], [browserSync.reload]);
});

Это не работает. Я получаю следующую ошибку:

TypeError: Cannot call method 'on' of undefined ...

person user791793    schedule 23.07.2015    source источник


Ответы (1)


Чтобы это работало, вам нужно сделать синхронизацию браузера зависимой в readRegEx.

gulp.task('browser-sync', ['readRegEx'], function() {

это гарантирует правильный порядок выполнения.

то вы можете сделать синхронизацию readRegEx (и проще) следующим образом:

gulp.task('readRegEx', function() {
    search_text = fs.readFileSync("regex/search.txt", "utf-8").toString();
    replace_text = fs.readFileSync("regex/replace.txt", "utf-8").toString();
});
person Benja    schedule 23.07.2015
comment
Спасибо за это. Добавленная деталь, позволяющая сделать синхронизацию браузера зависимой при чтении readRegex, была действительно полезной! Одна незначительная вещь: синхронизация браузера нормально перезагружается, когда я обновляю replace.txt, но не перезагружается, когда я обновляю search.txt. - person user791793; 24.07.2015
comment
странно, ваше выражение watch, кажется, отлично фиксирует оба файла. - person Benja; 24.07.2015
comment
На самом деле он обновляется, но изменения в search.txt по какой-то причине не учитываются, если я снова не запускаю gulp. - person user791793; 31.07.2015
comment
ах, это имеет смысл, вы сказали browsersync перезагрузить браузер, но ничего не говорит о перезагрузке этих txt-файлов. - person Benja; 31.07.2015