Подскажите, как подкрутить перезагрузку страницы при редактировании блоков?
Если есть способ с enb, то с enb Если есть gulp, то с gulp.
@verybigman что-то похожее реализовывал. Но так, как я понял, используется api сборщика bem, а не enb.
Может кто уже делал для себя конфиги?
Тут без плагина/расширения для браузера вариантов нет. Некий код должен слушать события на обновления кода, которое будет ловиться вотчерами.
Или я не правильно понял?
сам процесс понятен.
Я раньше делал сборку проекта с grunt. В браузере, на сколько помню, подключался скрипт, который перезагружал страницу при изменениях(событиях) на сервере.
Хочется внедрить похожее при разработке на bem, т.к. "много" времени уходит на перезагрузку страницы.
Для ребилда при измении файлов можно заюзать nodemon вот так:
А перегружать страничку можно вот так, например:
UPD: Косяк будет в том только, что reload будет срабатывать на make, но со второго раза норм;)
@verybigman а browser-sync может заменить live-reload?
@verybigman подскажи по browser-sync
по адресу localhost:3000 получаю 'Cannot GET /'
может что забыл добавить?
Разобрался. Нужно указывать полный путь. Есть возможность использовать списки файлов для навигации? (например как в Apache)
Разобрался. В browser-sync есть параметр
directory
@belozyorcev :+1:
@verybigman а как можно запускать задачу у gulp, после завершения
nodemon
?Есть у него события, на них можно реагировать. Посмотри в доках.
@verybigman, а ты пробовал gulp-shell?
@belozyorcev вот пример gulpfile - там и события у nodemon используются, и gulp-shell. Правда, нет live reload.)
@verybigman ты сталкивался с такой проблемой в browser-sync ? https://github.com/BrowserSync/browser-sync/issues/517
Интересно почему https? Я такого не встречал, не могу сказать. Только в хроме?
firefox вообще блокирует.
Походу проблема действительно в https Пытался напрямую обратиться по
http://localhost:3000/browser-sync/socket.io/
ответ получилСтранно...
с https работает
П.Н. firefox всёже работает и без https
в общем вроде реализовал, то что хотел. Вот конфиг, который получился
@apsavin nodemon и grunt-shell не могут нормально callback после команды делать... Реализовал через child_process
Правда время отклика от правок кода ещё не совсем то, какое хотелось бы
Хотя думаю, что если enb server перенастроить на данное поведение - то будет значительно быстрее.
Или хотябы подключить enb make в gulp файле, чтобы каждый раз не запускать "на холодную"
ENB LiveReload – очень просто:
@belozyorcev спасибо за наводку.
@tadatuta Имхо эта тема с WOW эффектом, но почему-то не в документации ;-(
@blond
enb server --browser-sync
), чтобы само дохло при остановке сервера. Врядли это правильно интегрировать в самenb
, но куда, если не туда?upd Если сейчас сервер можно стартовать через API, то может быть начнем тулзу писать, которая будет и шашечки делать, и рулить через это самое API? Типа,
bem server
v3.0
.@zxqfox я пока отвечу лишь на вопрос про то, куда
browser-sync
приткнуть. приткнуть его стоитproject-stub
в секциюscripts
вpackage.json
(чтобы можно было сказатьnpm start
и получить авторелоад), а в районеENB
ему вообще совсем не место.@tadatuta Ну я считаю, что и
server
'у вENB
тоже не место ;-) Аbrowser-sync
— для меня как плагин кserver
. Поэтому и спрашиваю, как сделать, чтобы оно послеnpm start
иCtrl+C
само сдохло.@zxqfox
browser-sync
запускается в режиме прокси и никак не аффектит ENB сервер. Он с тем же успехом может оборачивать твой апликейшн-сервер.@tadatuta Ну подожди, зачем сразу отказываться? Вот есть у нас морда, есть файлы блоков.
Скажем, если это будет не
browser-sync
, а нечто, реализующееlive-reload
, но более умно, с учетом предметной области? Например, нечто, что будет перезагружать только то, что изменилось? Естественно, делая это очень быстро.Мы поменяли стили блока — чтобы стили поменялись в браузере их нужно пересобрать и перезагрузить в браузер. Мы же технически можем это сделать на лету? Я поправил в файле блока на одном мониторе, сохранил, у меня без перезагрузки отобразились изменения на другом.
Аналогично и со скриптами — если скрипты не аффектят пол страницы, то их можно перезагрузить и подсунуть исправленные версии вместо имеющихся.
С другой стороны, для таких вещей нужны готовые решения, которые уже тоже есть, но с допилом под БЭМ-предметную область. Плюс хочется не открывать по несколько окон терминала, и не запускать руками kill, если использовать пример выше — хочется решение из коробки.
Пока я вижу некое небольшое приложение, которое будет стартовать параллельно
enb server
иbrowser-sync
(или аналог) и так же параллельно убивать обоих. Но...Опять же, тут еще вспоминается проблема с пересборкой для бекенда и перезапуском приложения, если оно собирается из блоков и внутри блоков поменялся код. Опять же, хочется из коробки, чтобы оно само исходя из конфигов пересобирало нужное, и после рестартило бекенд.
Хотя бы теоретическую возможность мы можем обсудить, или ответ не изменится и — резать к чертовай матири?
Сегодня :)
Я пока больше склоняюсь к @zxqfox, но обещать ничего не могу: надо посмотреть на деле.
@zxqfox @blond я не готов поручиться на 100%, но кажется, что
browser-sync
в режиме прокси работает именно так как ты описал, если есть некий вотчер, который следит за изменениями файлов. Ну и не вижу ничего БЭМ-специфичного в этой задаче.Я еще могу теоретически понять смысл в том, чтобы запилить вотчер на основе конфига сборки и некий раннер, который позволит стартануть все необходимое в одном инстансе терминала вместо трех, а логи будет как-то красиво мержить в общий stdout, но это уже звучит как нехилая такая задача на разработку вместо
@tadatuta Если на одном сервере запущено параллельно 102
enb server
(да, это девелоперский сервер), то этот вариант вообще не работает. Ну и, опять же, если я локально между проектами переключаюсь — рукамиkill $(ps ax |grep browser-sync| cut -f 1 чототам)
ну илиkillall browser-sync -9
запускать постоянно — зачем? Прописать вscripts
в каждом проекте? Явно хрень же, не?