EmberCLI: Chegando a um Discourse perto de você!

Gostaríamos de migrar o pipeline de ativos do Discourse para usar o EmberCLI. O EmberCLI é a maneira padrão de desenvolver aplicações Ember, e a abordagem do Discourse tem sido, há muito tempo, uma fonte de confusão para pessoas que se aproximam do nosso projeto com experiência em Ember.js.

Contexto

O Discourse existe há tempo suficiente para ter surgido antes da existência do EmberCLI. Na verdade, na época, o uso de algo como o pipeline de ativos do Rails era considerado uma prática recomendada. Ao longo dos anos, adicionamos cada vez mais recursos à nossa aplicação Ember, incluindo módulos JavaScript, Babel.js e mapas de origem, mas sentimos que já levamos o pipeline de ativos do Rails ao limite. Alguns novos recursos, como async/await, são muito difíceis de integrar ao nosso sistema atual.

Na próxima versão principal do Discourse (2.5), planejamos migrar para o EmberCLI. Isso levará bastante tempo, então faremos o possível para manter duas versões da nossa aplicação front-end funcionando. Pessoas mais ousadas poderão optar por usar o EmberCLI, enquanto outros poderão continuar usando a aplicação “como está”, até que cheguemos a um ponto em que consideremos tudo estável.

Roadmap

  1. Migrar padrões existentes para padrões do EmberCLI: Já fizemos um pouco disso na versão 2.4. Basicamente, o objetivo é migrar gradualmente nosso código JavaScript para um formato que se assemelhe ao que o Ember-CLI espera. Isso envolve:

    • importar tudo a partir dos mesmos caminhos
    • usar extensões diferentes para handlebars bruto / handlebars do Ember
    • eliminar depreciações de propriedades computadas
    • mudar do nosso módulo personalizado para o módulo Location do Ember
  2. Iniciar o Discourse via EmberCLI: Isso provavelmente envolverá a descoberta de novos problemas à medida que itens do ponto (1) forem corrigidos, repetindo a mesma abordagem.

  3. Integrar Componentes de Tema e Plugins: Precisaremos investigar como integrar as extensões existentes ao Discourse da forma mais transparente possível.

  4. Identificar quaisquer gargalos de desempenho (ou outros): o sistema deve ser tão rápido quanto o atual ou mais rápido.

  5. Definir um cronograma para a migração: ele precisará ser generoso para que as pessoas tenham bastante tempo para testar a funcionalidade em beta e fornecer feedback.

Vantagens

Quando a migração estiver completa, muitas coisas que atualmente estão quebradas ou difíceis de fazer, como mapas de origem e async/await, devem funcionar normalmente.

Além disso, para alguns desenvolvedores que desejam trabalhar apenas nas partes front-end do Discourse, poderemos configurar o ambiente de forma que eles possam executar o EmberCLI apontado para um servidor como try.discourse.org para desenvolver a aplicação front-end sem precisar rodar um servidor completo Ruby/Rails com Redis/Postgres.

Este será um projeto grande, mas no final nossa aplicação ficará muito melhor por isso!

Obrigado, Robin! Esse foco é muito importante para nós, claro.

Por favor, avise-nos se quiser que testemos alguma branch.

PS: Só consigo imaginar o quanto de trabalho essa migração vai dar, então muito obrigado.

Vocês também planejam eventualmente transformar plugins do Discourse em plugins do Rails? Isso seria ótimo! :smiley: Existem tantos geradores que o Rails oferece nativamente para plugins. Além disso, o Discourse é o maior aplicativo Rails de código aberto, então talvez fosse bom unir esforços.

Essa é uma solicitação diferente e muito mais complexa que não deve ser associada a este trabalho.

Vamos começar a mesclar algumas grandes alterações de linting de templates. Elas devem “simplesmente funcionar”, mas são esperadas algumas regressões. Faremos o nosso melhor para corrigi-las rapidamente, então por favor, relate qualquer coisa incomum, como elementos da interface do usuário que não estão atualizando quando deveriam.

Hoje, unifiquei um commit extenso que renomeia todos os arquivos .js.es6 na pasta app/assets/javascripts/discourse para .js. Este é um passo em direção à adoção do padrão de nomenclatura de arquivos do Ember CLI.

O próximo passo é adicionar suporte a plugins para transpilação de .js e descontinuar o uso de .es6.

Oi @eviltrout

Acabei de me deparar com isso. Como está o andamento desse trabalho? :slight_smile:

Muito bem. @eviltrout acabou de mesclar este commit há alguns dias:

Este é um marco enorme em direção a isso.

Adorável. Estou bem animado com isso. @angus @merefield também adorariam. :heart:

Sim, você pode executar o Ember CLI no modo de desenvolvimento agora mesmo! Provavelmente postarei mais sobre isso em breve, assim que ficar um pouco menos áspero de usar.

Estou animado por isso :slight_smile: