Что это такое?
LiveReload — это утилита, которая позволяет автоматически перезагружать страницу в браузере при изменение её кода и ресурсов(html, css, js, images, etc) на сервере. Кроме того LiveReload позволяет применять изменения в CSS и JavaScript без перезагрузки страницы.
Зачем это нужно?
Для удобства разработки клиентской части приложения и не более. Как написано на официальной странице утилиты:
The Web Developer Wonderland (a happy land where browsers don’t need a Refresh button)
Как это работает?
Принцип очень прост, утилита состоит из сервера и клиента:
- Cервер: WebSocket который мониторит изменения в заданных файлах и если такие изменения обнаружены — уведомляет клиента
- Клиент, есть несколько вариантов:
- Дополнение для браузера которое обновляет страницу.
- JavaScript сниппет, который слушает WebSocket сервер и при необходимости обновляет страницу. Его необходимо вставить в свои HTML файлы.
Node.js, huh?
Если Вы уже используете Node.js или Grunt.js, или хотите чтобы один метод LiveReload’а работал на всех платформах без изменений(LiveReload можно настроить и на Windows и на Linux и на MacOS X, но метод настройки везде разный) то можно использовать grunt-reload.
Итак, вот что понадобиться:
- Node.js. На Убунте к примеру ставим так:
sudo apt-get install nodejs npm
- Grunt.js
sudo npm install -g grunt
- Grunt плагин grunt-reload
npm install grunt-reload --save-dev
Плагин grunt-reload кроме двух уже указанных способов livereload’a имеет еще пару вариантов:
- Proxy: создает сервер, который будет проксировать запросы к dev. серверу добавляя к HTML файлам livereload сниппет. Избавляет от необходимости вручную обновлять html’ки для поддержки livereload.
- iFrame: идентичен предыдущему методу, только вместо автоматического добавления сниппета, открывает страницы в iFrame, который перезагружает их при необходимости. И ваши html’ки останутся чистыми!;)
К сожалению, grunt-reload не поддерживает применение CSS и JS без перезагрузки всей страницы. Точнее поддерживает, но только с использованием LiveReload browser extension.
Как использовать
Создаем свой проект, в нем создаем grunt.js и в нем настраиваем задачу watch(она будет мониторить изменения в файлах) и задачу reload(при изменении файлов делаем livereload).
Например, имеем такой express.js проект:
/public — статика(CSS, images, JS, templates, etc)
app.js — express.js application
grunt.js — Gruntfile
grunt.js выглядит так:
module.exports = function(grunt) { grunt.loadNpmTasks('grunt-bg-shell'); // подключаем grunt-reload grunt.loadNpmTasks('grunt-reload'); // Project configuration. grunt.initConfig({ bgShell: { //Запускаем приложение с помощью supervisor'a //Теперь при изменении серверного кода //сервер перезапускается автоматически supervisor: { cmd: 'supervisor app.js', stdout: true, stderr: true, bg: true } }, //настраиваем reload //сервер приложения крутится на localhost:3000 //переходим на localhost:6001 и получаем то же приложение только с LiveReload reload: { port: 6001, proxy: { host: 'localhost', port: 3000 }, }, watch: { //при изменении любого из этих файлов запустить задачу 'reload' files: [ //add here static file which need to be livereloaded 'public/styles/**/*.css', 'public/scripts/**/*.js', 'public/images/**/*', ], tasks: 'reload' } }); //стартуем приложение //reload и на клиенте и на сервере grunt.registerTask('server', 'bgShell:supervisor reload watch'); };
Теперь из корневого каталога приложения можно запустить команду
grunt server
И получить автоматически перезапускаемый сервер и LiveReload на клиенте по адресу localhost:6001
Данный Gruntfile так-же использует пакет supervisor(для мониторинга сервера), и пакет grunt-bg-shell для запуска супервизора в бэкграунде
sudo npm install -g supervisor npm install grunt-bg-shell --save-dev
ссылка на оригинал статьи http://habrahabr.ru/post/168091/
Добавить комментарий