Ventajas y desventajas de usar un tema en lugar de un plugin para la personalización

He notado que, para la personalización del diseño, se recomienda usar Temas en lugar de Complementos. ¿Cuáles son las ventajas?

Desde el punto de vista del desarrollo, veo los Temas como demasiado engorrosos. Necesito una herramienta más para poder ver los cambios de código en tiempo real: Consola CLI de Temas.

También entiendo que los Temas pueden ser seleccionables por el usuario (yo no necesito esa función).

¿Cuáles son las ventajas de los Temas sobre los Complementos en producción?

Mi opinión:

  1. Discreción en tiempo de ejecución durante la instalación en lugar de en tiempo de compilación, con cero tiempo de inactividad.
  2. Más fácil de desactivar y eliminar.
  3. Utilizable por clientes alojados que no tienen acceso a la consola.

Pero estoy de acuerdo en que, en mi opinión, los plugins suelen ser más fáciles de navegar desde la perspectiva de un desarrollador.

Con la adición de dividir el JavaScript del tema en varios archivos, puedes efectivamente hacer todo lo que un plugin puede hacer con Ember a través de un tema.

Por lo tanto, si no necesitas crear rutas, modificar serializadores o almacenar datos personalizados, es probable que puedas lograr tu objetivo solo con un tema.

El mayor desafío que vemos con los plugins personalizados desde una perspectiva de soporte son las caídas del sitio. Esto suele deberse a que el plugin parchea una clase o método de Rails en el núcleo que ha cambiado y el plugin aún no se ha actualizado para tenerlo en cuenta. Si algo cambia en el lado de Ember y, por lo tanto, rompe el tema o el componente del tema, el sitio puede no renderizarse correctamente, pero se puede desactivar rápidamente usando /safe-mode.

Entiendo tu punto. También diría que la gem te permite desarrollar tu tema localmente y sincronizarlo con cualquier sitio de Discourse al que tengas una clave de API, incluido theme-creator.discourse.org. Ni siquiera necesitas configurar un entorno de desarrollo local si tienes esa gem en ejecución.

¡Guau, las respuestas aquí son oro puro! Tengo muy poco que añadir.

Lo único que creo importante mencionar es que, internamente en Discourse, estamos avanzando para separar algunos plugins ahora en “plugin para el backend” y “tema para el frontend”. Estamos pensando en este desafío de “distribución” cuando las cosas están mezcladas de esta manera.

En general, mi recomendación extremadamente firme es recurrir a crear plugins solo si realmente los necesitas. Cuando necesitas modificar el backend en Ruby, no tienes más opción. Se desaconseja encarecidamente un plugin que solo realiza cambios en el frontend. Es más difícil mantenerlo actualizado y mucho menos flexible en cuanto a su uso.