El uso de <script type='text/discourse-plugin'> o <script type='text/x-handlebars'> en temas está ahora obsoleto. Cualquier uso de estas etiquetas en temas debe actualizarse siguiendo las instrucciones a continuación.
Los <script> y <script type='text/javascript'> regulares no se ven afectados por este cambio.
Cronología
Estas son estimaciones aproximadas, sujetas a cambios
-
Mayo de 2025 - Habilitados los mensajes de obsolescencia en la consola
-
Julio de 2025 - Habilitadas las pancartas de advertencia para administradores
-
Finales de septiembre de 2025Marzo de 2026 - Eliminación de la funcionalidad
Conversión de <script type='text/x-handlebars'>
Las plantillas introducidas con este método deben moverse a archivos .hbs dedicados, o refactorizarse a archivos .gjs.
Para mantenerlo como HBS, las plantillas de conector se pueden colocar en:
{theme}/javascripts/discourse/connectors/{outlet-name}/{connector-name}.hbs
y las plantillas de componente se pueden colocar en:
{theme}/javascripts/discourse/components/{component-name}.hbs
Desde marzo de 2026, los archivos
.hbstambién están obsoletos. Después de realizar esta conversión, continúe con las instrucciones en Deprecating .hbs file extension in themes and plugins
Para crear conectores y componentes en el formato .gjs moderno, consulte este capítulo del tutorial para desarrolladores de temas:
Conversión de <script type='text/discourse-plugin'>
El código dentro de estas etiquetas se puede migrar a un archivo JavaScript dedicado.
Si desarrolla su tema a través de la interfaz del panel de administración, copie el código de la etiqueta <script> y muévalo a la pestaña JS (donde dice // your code here).
Si desarrolla su tema localmente, cree un nuevo archivo en
{theme}/javascripts/discourse/api-initializers/init-theme.js
luego agregue este contenedor y coloque su código en el lugar indicado:
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
// Your code here
});
En las etiquetas de script, la única forma de importar otros módulos de JS era usando la sintaxis require(). Aunque esto seguirá funcionando en un archivo .js, pronto será obsoleto, por lo que ahora sería un buen momento para convertirlo a importaciones ES6 modernas. Por ejemplo:
- const I18n = require("discourse-i18n").default;
+ import I18n from "discourse-i18n";
- const { h } = require("virtual-dom");
+ import { h } from "virtual-dom";
Para obtener más información sobre los inicializadores de JS:


