Перезагрузка с помощью Browser Sync

Browser Sync упрощает веб-разработку за счёт запуска веб-сервера и его быстрой перезагрузки в реальном времени. У Browser Sync есть и другие возможности, такие как синхронизация действий на нескольких устройствах.

Сперва нам следует установить Browser Sync:

$ npm install browser-sync --save-dev

Возможно, вы заметили, что при установке Browser Sync отсутствует префикс gulp-. Это связано с тем, что Browser Sync работает с Gulp, поэтому нам не нужно использовать плагин.

Чтобы воспользоваться Browser Sync, потребуется его подключить через оператор require.

var browserSync = require('browser-sync').create();

Нам понадобится создать задачу browserSync, чтобы позволить Gulp перезагружать сервер через Browser Sync. Для этого нужно сообщить Browser Sync, где располагается корень сервера. В нашем случае это папка app:

gulp.task('browserSync', function() {
  browserSync.init({
    server: {
      baseDir: 'app'
    },
  })
})

Мы также должны немного изменить задачу sass, чтобы Browser Sync мог обновлять CSS в браузере всякий раз, когда выполняется задача sass.

gulp.task('sass', function() {
  return gulp.src('app/scss/**/*.scss') // Получает все файлы с расширением .scss из папки app/scss
    .pipe(sass())
    .pipe(gulp.dest('app/css'))
    .pipe(browserSync.reload({
      stream: true
    }))
});

Мы завершили настройку Browser Sync и теперь должны запустить задачи watch и browserSync одновременно, чтобы происходила перезагрузка в реальном времени.

Будет неудобно открывать две командные строки и выполнять gulp browserSync и gulp watch по отдельности, так что заставим Gulp запускать их вместе. Для этого сообщим задаче watch, что задача browserSync должна быть завершена до запуска watch. Мы можем сделать это, добавив второй аргумент к задаче watch. Синтаксис следующий:

gulp.task('watch', ['массив', 'задач', 'завершённых', 'до', 'watch'], function (){
  // ...
})

В нашем случае мы добавляем задачу browserSync.

gulp.task('watch', ['browserSync'], function (){
  gulp.watch('app/scss/**/*.scss', ['sass']); 
  // Другие отслеживания
})

Теперь при выполнении gulp watch в командной строке, Gulp должен одновременно запустить задачи sass и browserSync. После их завершения будет запущена задача watch.

Одновременно с этим откроется окно браузера, которое указывает на app/index.html. Если вы измените файл styles.scss, то увидите, как браузер перезагружается автоматически.

Есть ещё одна вещь, о которой надо сказать. Поскольку мы уже отслеживаем файлы .scss для перезагрузки, то почему бы не пойти дальше и перезагружать браузер при сохранении какого-либо файла HTML или JavaScript? Мы можем сделать это, добавив ещё два процесса и вызвав функцию browserSync.reload при сохранении файла:

gulp.task('watch', ['browserSync', 'sass'], function (){
  gulp.watch('app/scss/**/*.scss', ['sass']); 
  // Перезагрузка браузера при изменении файлов HTML или JS
  gulp.watch('app/*.html', browserSync.reload); 
  gulp.watch('app/js/**/*.js', browserSync.reload); 
});

Итак, в этом разделе мы научились трём вещам:

  1. запускать веб-сервер для разработки;
  2. использовать препроцессор Sass;
  3. перезагружать браузер при сохранении файла.

В следующем разделе мы рассмотрим оптимизацию ресурсов. Начнём с оптимизации файлов CSS и JavaScript.

Автор и редакторы

Автор: Зелл Лью
Последнее изменение: 14.12.2019
Редакторы: Влад Мержевич