2016-06-28 29 views
0

Ich habe eine Jekyll-Site, die Teil eines Gulp-Projekts ist und BrowserSync verwendet, um eine Vorschau der Site anzuzeigen, während sie erstellt wird. Eine meiner watch-Anweisungen sucht nach Änderungen an der html, um die Website automatisch zu aktualisieren.BrowserSync nur einmal neu laden, wenn Jekyll in Gulp für freigegebene Datei verwendet wird Update

gulp.watch('docs/_site/**/*.html').on('change', browserSync.reload); 

Funktioniert wie geplant.

Allerdings, wenn ich header.html (oder eine andere freigegebene Datei) aktualisiere der Browser aktualisiert werden mehr mal da all die Seiten gewechselt. Dies ist sinnvoll, da alle statischen Seiten aktualisiert werden. Aber ich möchte dies beim Aktualisieren einer freigegebenen Datei verhindern.

Gibt es eine Möglichkeit, dass Gulp/BrowserSync nur einmal aktualisiert wird, wenn eine gemeinsame Jekyll-Datei aktualisiert wird?

UPDATE

Meine Uhrenset wie folgt aussieht:

gulp.task('dev:watch', ['browserSync', 'docs:sass', 'docs:lib', 'docs:build'], function() { 
    gulp.watch(['scss/**/*.scss', 'docs/assets/**/*.scss'], ['dev:sass']); 
    gulp.watch(['docs/**/*.html', 'docs/**/*.md', '!docs/_site/**'], ['docs:build']); 
    gulp.watch('docs/_site/**/*.html').on('change', browserSync.reload); 
}); 

Die docs:build Aufgabe

:

gulp.task('docs:build', function() { 
    browserSync.notify('Building Jekyll'); 
    return spawn('jekyll', ['build', '--config', '_config.yml,_config_dev.yml', '--incremental'], {stdio: 'inherit'}); 
}); 

Antwort

0

# bearbeiten nach Ihrer Frage Ausgabe:

Änderungen in _site sind Folgen von dev:sass oder docs:build Aufgaben, so können Sie browserSync.reload von innerhalb dieser Aufgaben aufrufen. Sie werden dann sicher sein, dass es nur einmal anfügt.

# Ende bearbeiten

Also, bist du einen überwachten Prozess zu beobachten.

Sie haben eine jekyll serve ausgeführt, die standardmäßig Änderungen an der Wurzel beobachtet und eine Generation für alle Dateien einschließlich "_includes" -Dateien auslöst.

Für eine _include-Dateiänderung können Sie 10 Seiten + 10 Beiträge + 10 Sammelelemente = 30 aufgefrischte Seiten im _site-Ordner haben, was dazu führt, dass 30 gulp.watch-Updates ausgelöst werden.

Sie besser grundlegende jekyll Dateien und Ordner für die Änderung sehen würde:

gulp.watch(
    ['*.html', '*.md', '_includes/*.html', '_layouts/*.html', ...other files], 
    browserSync.reload() 
); 

und fügen Sie sogar einen reload delay ermöglichen jekyll einige Zeit dauern, zu regenerieren eine große Website und laden nach einem Abstieg Zeit:

browserSync.reload({reloadDelay: 5000}) 
+0

Hallo David. Ich laufe nicht "jekyll serve", es ist nur eine Jekyll basierte Seite (meine Formulierung könnte verwirrend gewesen sein). Gulp bearbeitet das Kompilieren (durch den Build-Prozess) und die Site wird (während des Entwickelns) von BrowserSync bedient. –

+0

Und wie Änderungen in _site passieren? schau zu -> jekyll build? Können wir Ihren Code sehen? –

+0

Ich habe meine Frage mit den Aufgaben "Uhr" und "Bau" aktualisiert. Vielen Dank! –