Após a bem-sucedida modernização dos sistemas de construção do tema e dos plugins ao longo do último ano, estamos agora prontos para avançar com uma atualização semelhante no núcleo do Discourse.
Apesar de ser uma reestruturação completa do sistema de construção do núcleo, essa mudança tem como objetivo ser totalmente compatível com versões anteriores. Instalações em produção do Discourse não devem perceber nenhuma alteração. O sistema de ativos pré-compilados continuará a garantir que seus servidores não precisem construir os ativos do núcleo por conta própria.
Tecnologias
Estamos migrando de ember-cli/webpack para o rolldown, um empacotador baseado em Rust para JavaScript. O Rolldown é o coração da versão mais recente do Vite, então estamos em boa companhia e alinhados com a direção do ecossistema Ember.
Todo o JavaScript do Discourse agora é construído para Módulos ES nativos, o que traz melhor desempenho em tempo de execução e desbloqueia várias otimizações futuras.
Desempenho da Construção
No desenvolvimento, as construções devem ser cerca de 80% mais rápidas do que antes. Na minha máquina[1], isso reduziu o tempo de inicialização do desenvolvimento de ~30s para ~5s. Esperamos que o desempenho melhore ainda mais no futuro, pois ainda existem partes da construção que dependem de tecnologias mais antigas, como o Babel.
Experiência do Desenvolvedor
Como parte dessa mudança, decidimos parar de usar um proxy na frente do Discourse para desenvolvimento. O desenvolvimento agora deve ser feito diretamente no servidor Rails.
bin/ember-cli -u foi substituído por bin/dev. Isso iniciará o Rails na porta :3000 e executará a construção do rolldown em segundo plano. A saída de log de ambos os processos será exibida com um prefixo apropriado. Você deve acessar :3000 no seu navegador. A porta :4200 não servirá mais nada.
Para ajudar na migração, bin/ember-cli agora é um adaptador compatível com versões anteriores. Ele exibirá informações de ajuda e iniciará um servidor leve na porta :4200 com instruções para migrar para :3000.
Se preferir iniciar o Rails e a construção de JS como comandos separados, você ainda pode fazer isso. Os comandos de inicialização do Rails permanecem inalterados, e o empacotador rolldown pode ser executado no modo de watch usando bin/dev --only ember.
Avisos de construção desatualizada
Se a construção atual no disco foi produzida pelo empacotador de desenvolvimento rolldown e esse processo de empacotamento não está mais em execução, o Rails lançará um erro para avisar que os ativos estão desatualizados. Isso se aplica ao modo de desenvolvimento e aos testes de sistema.
Esse erro não será lançado se você usar o comando de construção única (pnpm build), como fazemos no CI.
Obrigado!
Este trabalho foi possível graças às equipes do Ember/Embroider e à The Ember Initiative. Agradecimentos especiais ao @real_ate pelo seu trabalho conosco neste projeto! ![]()
MacBook Pro com chip M3 Pro ↩︎