Cambio de 'use strict' en componentes de temas próximos: los temas se rompen después de actualizar Discourse

Estoy ahora en el nivel de commit más reciente (105634435f). Actualizo Discourse aproximadamente una vez por semana. Por lo general, no hay ningún problema. Pero ahora, varios componentes de temas no logran cargarse. Cuando digo que no logran cargarse, me refiero a que los componentes ya no aparecen. La función de registro en el panel de administración no muestra nada extraño que pueda relacionar con este problema. Muchos de esos errores parecen incidentales y ya ocurren desde hace un período más largo. Por ejemplo, errores raros de MimeType y tiempos de espera para DNS a Google; de nuevo, ocurren con poca frecuencia.

Estos plugins fallan al cargar después de la actualización:

  • DiscoTOC
  • discourse gifs
  • Discourse Jitsi
  • Hamburger Theme Selector
  • Nav Links Component
  • Tag Icons

Los únicos que funcionan son:

  • Discourse Kanban
  • Easy Footer

Si se necesita más información (supongo que sí), estaré encantado de proporcionársela; por favor, indícame qué necesitas. Esta publicación es más bien un aviso de que algo está mal y probablemente se deba a un cambio reciente. Disculpa la falta de información…

4 Me gusta

Además, las definiciones de variables de JavaScript no estrictas como:

xxx = 330;

en lugar de

var xxx = 330;

provocarán errores de JS de “variable no definida”. Tuvimos que cambiar todas estas en nuestros scripts.

Sí, hay un problema con algunos componentes del tema; estamos trabajando en una solución.

9 Me gusta

@pmusaraj muchas gracias.
¡Buena suerte!

¿Sabes por qué se lanzan errores para variables JS no definidas en modo estricto en los componentes? ¿Es un error de postprocesamiento? ¿Ha cambiado algo aquí?

El cambio que causó estos problemas se revirtió hace una hora; por favor, actualiza a la última versión si tu sitio se vio afectado.

9 Me gusta

Para complementar lo que dijo Falco, el cambio se volverá a implementar en los próximos días, pero antes de hacerlo me aseguraré de que todos nuestros temas y componentes oficiales sean compatibles con él. Por lo tanto, si vuelves a observar el problema con los temas o componentes oficiales, actualizarlos debería solucionarlo.

También publicaré una explicación sobre cómo hacer que los temas y componentes sean compatibles para quienes tienen componentes personalizados o privados en sus sitios.

Mis disculpas por las molestias de hoy.

6 Me gusta

Uno de nuestros temas (un tema de banner) ha sido completamente sobrescrito a su formato inicial y todos los cambios que habíamos realizado se han perdido. No hubo ninguna actualización para el tema desde 2018. ¿Podríamos revertir los cambios?

Hmm, eso es realmente extraño. ¿Has actualizado tu instancia nuevamente para incluir Revert "FEATURE: Introduce theme/component QUnit tests (#12517)" (#12… · discourse/discourse@2b9ab3a · GitHub? ¿Podrías explicarnos un poco más a qué te refieres con “formato inicial”? ¿Quieres decir que tenías cambios locales en el JS/CSS del tema, pero ahora todos esos cambios han desaparecido?

2 Me gusta

¿Esto también explica el problema con las definiciones de variables en JS? De ser así, ¿cómo?

No creo que este problema tenga que ver con la función revertida; tuve un caso similar con un componente hace unas semanas, probablemente relacionado con la función del indicador de bifurcación (que afecta a los complementos, así que :roll_eyes: probablemente sea irrelevante también, pero simplemente tuve que bifurcar el componente para modificar cosas).

1 me gusta

Es realmente extraño, nunca tuvimos ese problema. Apareció justo con la última versión. Y me pregunto qué es exactamente lo que está pasando aquí.

Fue un cambio complejo que también afectó al JS “inline” de los temas. Se revertió y se volverá a trabajar en los próximos días antes de volver a implementarlo. Puedes leer los detalles en FEATURE: Introduce theme/component QUnit tests by OsamaSayegh · Pull Request #12517 · discourse/discourse · GitHub

3 Me gusta

Sí, ese cambio es la causa del problema que observaste en tu tema. Necesito entrar en un poco más de detalle sobre el sistema de temas para explicar lo que sucedió. Hay dos formas de agregar JS a un tema o componente de Discourse: la primera utiliza etiquetas <script type="text/discourse-plugin"> dentro de archivos head_tag.html, y la segunda utiliza archivos JS independientes que residen en un directorio llamado javascripts dentro de tu tema o componente.

Antes de mi cambio de hoy, el JavaScript dentro de esas etiquetas de script especiales se procesaba de una manera que dependía de la variable global Discourse, la cual no está disponible cuando se desarrolla en Discourse con Ember CLI. En el cambio que implementé hoy, hice que Discourse tratara el JS dentro de esas etiquetas como si proviniera de archivos independientes, lo que nos permitió evitar el uso de la variable global Discourse.

Ahora, un “efecto secundario” de tratar las etiquetas de JavaScript como archivos es que el JavaScript dentro de las etiquetas tendrá la directiva "use strict", la cual no tenía antes, y esa directiva es la que causa los errores que viste:

Te recomiendo que mantengas todos los cambios que hiciste hoy en tu tema, ya que las etiquetas de JS volverán a tratarse como archivos independientes cuando restaure mi cambio.

6 Me gusta

Sí, solo eran algunas definiciones flojas en nuestro código y todo funciona bien después de hacerlas estrictas.

De todos modos, gracias por explicarlo con más detalle. Probablemente también sea útil para otros.

1 me gusta

Sí, todos los cambios han desaparecido: desde modificaciones en CSS y JS hasta cambios en el texto :sweat: Es decir, mi tema ha vuelto a su formato inicial con textos como “Lorem ipsum dolor sit amet…”. De todos modos, usaré la copia de seguridad, pero fue algo extraño que ocurriera después de la actualización.

1 me gusta

Hola @Pad_Pors,

Creo que tu problema está más relacionado con esto. :slightly_smiling_face:

Sobre el otro tema que mencionaste:

Así que creo que no has actualizado tu Discourse en un tiempo.

4 Me gusta

Continúa aquí: