Creamos una directiva Sprockets personalizada para el plugin Custom Wizard

El plugin Custom Wizard crea su propia aplicación Ember y toma prestados algunos de los activos del núcleo de Discourse.

Para ello, utilizamos un archivo JS llamado wizard-custom.js con directivas de Sprockets dirigidas a archivos individuales.

En algunos casos, requeríamos muchos archivos de la misma carpeta y durante mucho tiempo tuvimos la tentación de usar require_tree, pero desafortunadamente, eso no es posible por las siguientes razones:

  • El archivo wizard-custom.js está ubicado dentro del plugin, por lo que su load path es diferente al de Discourse y solo podemos requerir archivos dentro del load path.
  • Sprockets no permite rutas absolutas al usar require_tree.

Resolver esto también significaría que el plugin se rompe con menos frecuencia debido a cambios en el núcleo de Discourse.

Para mitigar esto, creamos una directiva personalizada de Sprockets llamada require_tree_discourse que busca específicamente activos dentro de la carpeta de Discourse usando rutas absolutas. Aquí está el PR que contiene ese código.

Pensamos que sería interesante para los desarrolladores de Discourse y, en general, para los desarrolladores de Rails.

Desafortunadamente, tuvimos que revertir este cambio, ya que no funciona en producción.

Parece que los complementos se cargan un poco más tarde en comparación con cuando se leen los archivos js.

Sí funciona. Reintroduciremos el cambio pronto.

Finalmente hemos implementado esto en nuestro código.

Ten en cuenta que estimo que dentro de 12 meses habremos abandonado los sprockets en favor de compilaciones basadas en ember-cli. @eviltrout ya ha comenzado a trabajar en la investigación de esta transición.

Gracias por la advertencia anticipada. Cualquier orientación en esa dirección será de gran ayuda. cc @angus