¿Recarga en caliente para el desarrollo de plugins?

Hola a todos. Disculpas si esto ya ha sido tratado (no lo encontré):

Desarrollar un plugin de Discourse en mi máquina local suele ser bastante lento. Cada recarga de mi aplicación en ejecución local (para ver los cambios de código) tarda más de 5 segundos. Así que hago un cambio en un archivo html/hbs o js, guardo, luego tengo que recargar la aplicación [edición: actualizar el navegador] y esperar más de 5 segundos para ver el cambio.

¿Existe alguna manera de hacer un recarga en caliente (es decir, actualización automática de la vista local) para el desarrollo local de plugins de Discourse?

Parece que los archivos CSS se actualizan automáticamente, pero no los archivos html/hbs o js.

Aunque estoy atento por si hay alguna pista, creo que simplemente es así. Y por lo que he visto, en un Mac es mucho peor.

¡Hola a todos!

Deberías tener que reiniciar el servidor con bastante confianza solo si tu API ha cambiado, es decir, tu código de Ruby on Rails.

Si solo has modificado los archivos de JavaScript o HBS, puedes recoger los cambios simplemente refrescando el navegador.

¡Te habrás dado cuenta de que los cambios en los archivos CSS ni siquiera requieren eso! :slight_smile:

Estoy hablando aquí de la recarga del navegador y de si el hot reload está disponible para evitar tener que hacerlo. Es la recarga del navegador la que tarda más de 5 segundos para ver cualquier cambio.

Si tengo que detener y recargar el servidor (en el caso de que cambie plugin.rb, por ejemplo), eso probablemente tome 60 segundos.

El hot reload es, por supuesto, el estándar para el desarrollo con muchas tecnologías hoy en día (estoy más familiarizado con Angular, que tiene este estándar), y es increíble para el desarrollo. Creo que con Rails es posible a través de webpack (pero no estoy seguro de eso). Mi impresión es que el hot reload no está disponible para el desarrollo de Discourse, pero quería verificarlo, porque sería genial si estuviera disponible.

Necesitas actualizar el navegador para cargar los archivos de JavaScript actualizados.

Esto llegará con EmberCLI: Coming to a Discourse near you!

¡De hecho, puedes usar Ember CLI con la versión master de Discourse ahora mismo para obtener este comportamiento!

Eso suena genial, gracias. Para usar esto en desarrollo local, ¿hay algo que deba hacer además de descargar la última versión de Discourse desde GitHub a mi computadora?

Necesitarás revisar el último Discourse y luego hacer algo como esto:

  1. Inicia el servidor de API: rails s

  2. Inicia el servidor de Ember:

    1. Entra en la carpeta correcta cd app/assets/javascript/discourse
    2. Instala los paquetes yarn
    3. Ejecuta el CLI de Ember: ember serve --proxy "http://localhost:3000"

Luego podrás abrir http://localhost:4200 y deberías estar ejecutándote en el CLI de Ember con recarga en caliente.

¡Estaba emocionado por actualizar mi instancia local de Discourse y ahora estoy ejecutando la versión 2.8 localmente. Sin embargo, aún no logro que la recarga en caliente funcione para los cambios en HTML y JavaScript.

Así es como ejecuto las cosas:

Entra en la carpeta de Discourse localmente

$ redis-server //inicia el servidor

$ rails s //inicia la aplicación de Rails

$ yarn //solo ejecútalo la primera vez, supongo

$ bin/ember-cli //inicia Ember CLI. El comando ember serve --proxy "http://localhost:3000" me dio errores por alguna razón

Esto hace que la aplicación se ejecute correctamente en localhost:4200.

He añadido un plugin a la instancia local de Discourse, el cual se muestra correctamente en localhost:4200. Sin embargo, si realizo cambios en los archivos HTML o JavaScript, estos cambios solo se reflejan en la aplicación que se ejecuta localmente si actualizo el navegador.

¿Hay algo más que deba hacer para que la recarga en caliente funcione?

Hola. ¿Está disponible la recarga en caliente (hot-reload) con ember-cli en Discourse? Todavía tengo el mismo problema que mencioné en mi publicación anterior. Siguiendo esos pasos, aún no obtengo la recarga en caliente (es decir, todavía tengo que actualizar el navegador para ver los cambios en HTML y JavaScript, y la salida de ember-cli en la terminal no parece registrarse cuando guardo después de modificar un archivo).

La recarga en caliente sigue sin funcionar para mí. ¿Hay algo más además de estos pasos que deba hacer?

Lo que hago es

./bin/rails s

En una terminal y

./bin/ember_cli

En otra.

Sí. Gracias. Yo también lo hago. ¿Obtienes la recarga automática (es decir, “hot reloading”) para archivos HTML y JS?

¿Te refieres a los archivos hbs?

Sí, no entiendo lo que creo que se llama “liveReload” en el navegador, a pesar de?:

image

Y la presencia de:

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

y

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

Sí, me refería a archivos HBS.

Agradecería mucho poder obtener la recarga en vivo (especialmente para archivos de JavaScript). Cuando programo en otros contextos, donde la recarga en vivo es estándar, este proceso hace que la codificación sea mucho más rápida y divertida.

Algunas informaciones adicionales:

ember-cli/ember-cli-inject-live-reload: Complemento de Ember CLI que inyecta el script de live-reload en el contenido HTML (github.com)

" livereload.js inicia una conexión websocket de vuelta a Ember CLI. Esto permite que Ember CLI notifique al navegador para que active una actualización tras cambios en JavaScript o en los estilos."

Me pregunto por qué el navegador ignora esto; me pregunto si es una opción del navegador relacionada con la seguridad del sitio.

No estoy seguro, pero definitivamente he logrado que la recarga en vivo funcione en el navegador en otros contextos o con otros frameworks. (No estoy seguro sobre Ember; solo lo he usado para codificar cosas de Discourse.)

Me interesa saber si se espera que la recarga en vivo funcione. Parece que sí, según la discusión anterior. En ese caso, me pregunto si el equipo de Discourse tiene la recarga en vivo y si están haciendo algo que yo no hago.

La presencia de los scripts es sin duda un signo de intención; ¿nada aquí es por accidente?

Por lo tanto, me pregunto si se trata de un problema de configuración local del navegador o de algún otro problema de configuración.

Más información sobre livereload.js: livereload/livereload-js: Código JavaScript de LiveReload que se comunica con el servidor e implementa la recarga (github.com)

Sin duda, sería agradable obtener una declaración oficial sobre el grado en que la recarga en vivo debería funcionar aquí y si va más allá del CSS en el lado del cliente.

La actualización automática de la página es gestionada por ember CLI. Por el momento, los activos de temas y complementos son compilados y servidos por la aplicación Rails, no por ember CLI. Por lo tanto, los cambios en temas o complementos no actualizan automáticamente la página.

Esto podría ser algo que podamos mejorar en el futuro. Pero por ahora, es un comportamiento esperado.