Livereload

Перейдите к следующему слайду, нажав кнопку Вправо

Учимся работать с библиотекой livereload в Python

Подготовлено онлайн-курсом

https://dvmn.org

from livereload import Server, shell


server = Server()
server.watch('docs/*.rst', shell('make html', cwd='docs'))
server.serve(root='docs/_build/html')

Разбор примера из документации

1. Создали сервер. Он ответит на запросы браузера и отдаст ему файлы.

Файл server.py

$ python server.py
[I 200201 18:43:42 server:296] Serving on http://127.0.0.1:5500
[I 200201 18:43:42 handlers:62] Start watching changes
[I 200201 18:43:42 handlers:64] Start detecting changes

Запуск скрипта server.py

2. Даём команду следить за изменениями в файлах и после каждого изменения запускать консольную программу `make html` в каталоге `docs`.

3. Запускаем сервер. Функция будет работать вечно и код ниже этой строки никогда не запустится.

server.watch('docs/*.rst', shell('make html', cwd='docs'))

Как работает server.watch()

За чем следить. Можно указать файл, можно указать маску файлов. В данном случае библиотека следит за всеми файлами в папке docs/, у которых расширение .rst

Что делать, если что-то поменялось. Сюда передаётся функция без вызова (коллбек). Не смотрите, что в примере вызывается функция shell — она особенная и сама возвращает новую функцию.

def rebuild():
    ... # do things
    print("Site rebuilded")


server.watch('myfile.txt', rebuild)

Следит за файлом myfile.txt

Как только файл поменялся, вызывает функцию on_reload(), которая пишет в терминал "Site rebuilded"

Как работает server.watch()

Вызова watch() недостаточно

def rebuild():
    ... # do things
    print("Site rebuilded")

rebuild()

server.watch('template.html', rebuild)

Для изменений, сделанных до запуска скрипта

Для изменений после запуска скрипта

from livereload import Server, shell


server = Server()
server.watch('docs/*.rst', shell('make html', cwd='docs'))
server.serve(root='docs/_build/html')

Как работает server.serve()

Даём серверу команду брать файлы из папки,  указанной в параметре root. Теперь при каждом запросе от браузера сервер будет искать файлы  внутри каталога `docs/_build/html`.

server.serve(root='.')

А вот как раздать статику из текущей папки

Обратите внимание, что функция serve будет работать вечно, и это надо учитывать при написании программы. Не помещайте никакой код следом за вызовом serve() — он никогда не будет запущен.

Как работает server.serve()

Полный пример

from livereload import Server


def rebuild():
    ... # do things
    print("Site rebuilded")

rebuild()

server = Server()

server.watch('template.html', rebuild)

server.serve(root='.')
$ livereload dist

Как раздать статику вообще без Python

Раздаёт статику из папки dist и следит за изменениями в ней.

Если вы только верстаете, вам не нужна  шаблонизация, то можно не писать Python-скрипт для лайврелоада.

 

Достаточно положить index.html и прочие файлы в папку dist/ и запустить одну команду в терминале.

Сайт появится по адресу http://127.0.0.1:35729

Документация

Полная документация библиотеки livereload собрана здесь.

Создано для онлайн-курса https://dvmn.org