Горячая перезагрузка для разработки плагинов?

Всем привет. Прошу прощения, если этот вопрос уже обсуждался (я не нашёл):

Разработка плагина для Discourse на локальной машине обычно довольно медленная. Каждая перезагрузка локально запущенного приложения (чтобы увидеть изменения в коде) занимает более 5 секунд. То есть я вношу изменения в HTML/HBS или JS-файл, нажимаю «Сохранить», затем должен перезагрузить приложение [редакция: обновить страницу браузера] и ждать 5+ секунд, чтобы увидеть изменения.

Есть ли способ включить горячую перезагрузку (то есть автоматическое обновление локального представления) при разработке плагинов для Discourse на локальной машине?

Кажется, что CSS-файлы обновляются автоматически, но HTML/HBS или JS-файлы — нет.

Хотя я слежу, нет ли каких-либо подсказок, я думаю, что таковы обстоятельства. И, судя по тому, что я видел, на Mac это гораздо хуже.

Привет, ребята,

Вы можете быть уверены, что перезапускать сервер нужно только при изменении API — то есть вашего кода Ruby on Rails.

Если вы изменили только файлы JavaScript или HBS, достаточно просто обновить страницу в браузере, чтобы изменения применились.

Вы, наверное, уже заметили, что изменения в CSS-файлах вообще не требуют даже этого! :slight_smile:

Я говорю здесь о перезагрузке браузера и о том, доступна ли горячая перезагрузка, чтобы избежать этого. Именно перезагрузка браузера занимает более 5 секунд для отображения любых изменений.

Если мне нужно остановить и перезагрузить сервер (например, когда я изменяю plugin.rb), это, вероятно, занимает 60 секунд.

Горячая перезагрузка, конечно, является стандартом при разработке со многими технологиями сегодня (я наиболее знаком с Angular, где этот стандарт принят), и это отлично подходит для разработки. Я считаю, что с Rails это возможно через webpack (но не уверен в этом). Мне кажется, что горячая перезагрузка недоступна для разработки в Discourse, но я хотел уточнить, потому что было бы здорово, если бы она была доступна.

Вам необходимо обновить страницу браузера, чтобы загрузить обновленные JavaScript-файлы

Это появится вместе с EmberCLI: Coming to a Discourse near you!

На самом деле вы уже можете использовать Ember CLI с актуальной версией Discourse, чтобы получить такое поведение!

Звучит отлично, спасибо. Чтобы использовать это для локальной разработки, нужно ли мне что-то делать помимо загрузки последней версии Discourse с GitHub на мой компьютер?

Вам нужно ознакомиться с последней версией Discourse, а затем выполнить следующие действия:

  1. Запустите API-сервер: rails s

  2. Запустите Ember-сервер:

    1. Перейдите в нужную папку cd app/assets/javascript/discourse
    2. Установите пакеты yarn
    3. Запустите Ember CLI: ember serve --proxy "http://localhost:3000"

После этого откройте http://localhost:4200 — вы увидите, что приложение работает в режиме Ember CLI с горячей перезагрузкой.

Я с энтузиазмом обновил свой локальный экземпляр Discourse, и теперь у меня запущена версия 2.8 локально. Однако я пока не могу заставить hot reload работать для изменений в HTML и JS.

Вот как я запускаю всё:

Зайти в папку discourse локально

$ redis-server //запускает сервер

$ rails s //запускает приложение Rails

$ yarn //запускать это, по моему предположению, нужно только один раз

$ bin/ember-cli //запускает ember cli. Команда ember serve --proxy "http://localhost:3000" по какой-то причине выдавала мне ошибки

Это успешно запускает приложение на localhost:4200.

Я добавил плагин в локальный экземпляр Discourse, который успешно отображается на localhost:4200. Однако, если я вношу изменения в файлы HTML или JS, эти изменения отображаются в локально запущенном приложении только после обновления страницы в браузере.

Нужно ли мне сделать что-то ещё, чтобы hot reload работал?

Привет. Доступна ли горячая перезагрузка (hot-reload) с ember-cli в Discourse? У меня по-прежнему та же проблема, о которой я упоминал в предыдущем посте. Следуя этим инструкциям, я всё ещё не получаю hot-reload (то есть мне всё ещё нужно обновлять браузер, чтобы увидеть изменения в HTML и JavaScript, а вывод ember-cli в терминале, похоже, не реагирует, когда я нажимаю «Сохранить» после изменения файла).

Горячая перезагрузка по-прежнему не работает у меня. Есть ли что-то ещё помимо этих шагов, что мне нужно сделать?

Я делаю так:

./bin/rails s

В одной оболочке и

./bin/ember_cli

В другой.

Да. Спасибо. Я тоже так делаю. У вас есть горячая (то есть автоматическая) перезагрузка для HTML и JS файлов?

Вы имеете в виду файлы hbs?

Да, я не понимаю, что, как мне кажется, называется «liveReload» в браузере, несмотря на?:

image

И наличие:

<script type="text/javascript" src="http://localhost:4200/_lr/livereload.js?port=4200&amp;host=localhost&amp;path=_lr/livereload"></script>

и

<script src="/ember-cli-live-reload.js" type="text/javascript"></script>

Да, я имел в виду файлы HBS.

Буду очень признателен за возможность использовать живую перезагрузку (особенно для файлов JavaScript). Когда я работаю в других средах, где живая перезагрузка является стандартом, она значительно ускоряет процесс разработки и делает его более увлекательным.

Дополнительная информация:

ember-cli/ember-cli-inject-live-reload: Плагин Ember CLI, который внедряет скрипт live-reload в HTML-контент (github.com)

livereload.js инициирует WebSocket-соединение обратно к Ember CLI. Это позволяет Ember CLI уведомлять браузер о необходимости перезагрузки после изменений в JavaScript или стилях.”

Меня интересует, почему браузер игнорирует это — не связано ли это с опцией браузера, касающейся безопасности сайта?

Я не уверен, но в других контекстах и с другими фреймворками мне точно удавалось настроить live reload в браузере. (Не уверен насчёт Ember — я использовал его только в рамках разработки для Discourse.)

Мне интересно, ожидается ли поддержка live reload. Судя по предыдущему обсуждению, кажется, что да. В таком случае, интересно, есть ли live reload у команды Discourse и делают ли они что-то, чего не делаю я.

Наличие скриптов, безусловно, свидетельствует о намерениях — ничего здесь не происходит случайно?

Поэтому я задаюсь вопросом: это проблема локальной конфигурации браузера или какая-то другая проблема конфигурации.

Подробнее о livereload.js: livereload/livereload-js: JavaScript-код LiveReload, который взаимодействует с сервером и реализует перезагрузку (github.com)

Безусловно, было бы полезно получить официальное разъяснение относительно того, насколько должна работать функция автоматической перезагрузки в данном случае и выходит ли она за пределы CSS на стороне клиента.

Автоматическое обновление страницы обрабатывается ember CLI. В данный момент ресурсы тем и плагинов компилируются и обслуживаются приложением Rails, а не Ember CLI. Поэтому изменения в темах или плагинах не приводят к автоматическому обновлению страницы.

В будущем мы можем улучшить эту ситуацию. Но на данный момент такое поведение является ожидаемым.