Nos últimos meses, temos trabalhado em um novo sistema de compilação para o código JavaScript de plugins. Isso atualizará os plugins de acordo com as alterações que fizemos no sistema de compilação de temas em julho de 2025, que se baseiam em tecnologias de navegador mais modernas e ferramentas de compilação de JS.
Esta alteração é amplamente retrocompatível. A maioria dos autores de plugins não precisará fazer nada. ![]()
Benefícios
Além da modernização interna, esta mudança trará vários benefícios funcionais para desenvolvedores e hosts do Discourse:
-
Os assets dos plugins são fortemente armazenados em cache e são referenciados em uma base por plugin. Isso significa que reiniciar seu servidor em desenvolvimento não exigirá a reconstrução de todos os plugins do zero.
-
Podemos começar a incluir código pré-compilado para plugins populares em nossos pacotes de assets existentes. Durante uma reconstrução, apenas plugins alterados/novos precisarão ser compilados. Isso deve ser especialmente útil para máquinas com recursos limitados.
-
O código do plugin será transpilado para um módulo ES nativo. Isso traz uma sintaxe muito mais simples, execução mais rápida no navegador e desbloqueia o uso futuro de coisas como
import()para divisão de pacotes no futuro.
Teste / Cronograma
Temos testado este sistema internamente por algum tempo e verificamos sua funcionalidade em centenas de plugins oficiais. O Meta está rodando com o novo sistema há semanas.
Se você quiser experimentá-lo, pode definir a variável de ambiente ROLLUP_PLUGIN_COMPILER=1.
Planejamos mudar o padrão muito em breve. Haverá um breve período em que o novo sistema poderá ser desativado usando ROLLUP_PLUGIN_COMPILER=0, caso haja alguma surpresa, mas pretendemos manter o período de transição no mínimo.
Possíveis problemas com plugins complexos
Para plugins mais complexos, há algumas coisas nas quais o novo sistema é mais rigoroso:
-
Importar módulos de administração de código que não é de administração agora gerará uma exceção. Isso sempre foi desaconselhado e causaria erros surpreendentes. Agora é detectado e bloqueado de forma mais deliberada.
Se você encontrar este problema, você deve considerar se o código do seu plugin ficaria melhor localizado no diretório admin-js (
admin/assets/javascripts/...). Se você realmente precisar importar módulos de administração condicionalmente, você deve usar o helperoptionalRequiredo core para conseguir isso. -
Importações entre plugins ainda são suportadas. No entanto, semelhante aos módulos de administração, importar módulos de um plugin que não está instalado/habilitado agora gerará um erro muito mais óbvio. Se a dependência entre plugins for opcional, você deve usar o helper
optionalRequiredo core. -
Pequenas mudanças de tempo podem causar problemas em casos raros. Agora que o código do plugin está sendo compilado para módulos ES nativos, qualquer coisa no escopo do módulo está sendo executada imediatamente. Se você tinha alguma lógica incomum no escopo do módulo, pode ser necessário movê-la para o código de tempo de execução (por exemplo, dentro de um construtor de classe ou similar).
Se você encontrar algum desses problemas e precisar de ajuda para resolvê-los, não hesite em postar abaixo.