En los últimos meses, hemos estado trabajando en un nuevo sistema de compilación para el código JavaScript de los plugins. Esto pondrá al día a los plugins con los cambios que realizamos en el sistema de compilación de temas en julio de 2025, los cuales se basan en tecnologías de navegador más modernas y herramientas de compilación de JS.
Este cambio es en gran medida retrocompatible. La mayoría de los autores de plugins no necesitarán hacer nada. ![]()
Beneficios
Además de la modernización tras bastidores, este cambio aportará una serie de beneficios funcionales para los desarrolladores y hosts de Discourse:
-
Los assets de los plugins se almacenan fuertemente en caché y se identifican por plugin. Esto significa que reiniciar el servidor en desarrollo no requerirá reconstruir todos los plugins desde cero.
-
Podemos empezar a incluir código precompilado para plugins populares en nuestros paquetes de assets existentes. Durante una reconstrucción, solo los plugins modificados/nuevos necesitarán ser compilados. Esto debería ser especialmente útil para máquinas con recursos limitados.
-
El código del plugin se transpilá a un módulo ES nativo. Esto trae una sintaxis mucho más simple, una ejecución más rápida en el navegador y desbloquea el uso futuro de cosas como
import()para la división de paquetes en el futuro.
Pruebas / Cronograma
Hemos estado probando este sistema internamente durante algún tiempo y hemos verificado su funcionalidad en cientos de plugins oficiales. Meta ha estado funcionando con el nuevo sistema durante semanas.
Si deseas probarlo tú mismo, puedes establecer la variable de entorno ROLLUP_PLUGIN_COMPILER=1.
Planeamos cambiar el valor predeterminado muy pronto. Habrá un breve período en el que el nuevo sistema se podrá deshabilitar usando ROLLUP_PLUGIN_COMPILER=0, en caso de cualquier sorpresa, pero tenemos la intención de mantener el período de transición al mínimo.
Posibles problemas con plugins complejos
Para plugins más complejos, hay algunas cosas con las que el nuevo sistema es más estricto:
-
Importar módulos de administración desde código que no es de administración ahora generará una excepción. Esto siempre ha estado desaconsejado y causaría errores sorprendentes. Ahora se detecta y bloquea de manera más deliberada.
Si te encuentras con este problema, deberías considerar si el código de tu plugin estaría mejor ubicado en el directorio
admin-js(admin/assets/javascripts/...). Si realmente necesitas importar módulos de administración condicionalmente, entonces deberías usar la ayudaoptionalRequiredel núcleo para lograrlo. -
Las importaciones entre plugins todavía son compatibles. Sin embargo, similar a los módulos de administración, importar módulos de un plugin que no está instalado/habilitado ahora generará un error mucho más obvio. Si la dependencia entre plugins debe ser opcional, entonces deberías usar la ayuda
optionalRequiredel núcleo. -
Cambios sutiles en la temporización pueden causar problemas en casos raros. Ahora que el código del plugin se está compilando a módulos ES nativos, cualquier cosa en el ámbito del módulo se está ejecutando ávidamente. Si tenías alguna lógica inusual en el ámbito del módulo, puede que necesites moverla al código de tiempo de ejecución (por ejemplo, dentro de un constructor de clase, o similar).
Si te encuentras con alguno de estos problemas y necesitas ayuda para resolverlos, no dudes en publicar a continuación.