Recarregamento a quente para desenvolvimento de plugins?

Olá a todos. Peço desculpas se isso já foi abordado (não encontrei):

Desenvolver um plugin do Discourse na minha máquina local tende a ser bastante lento. Cada recarregamento do aplicativo em execução local (para visualizar as alterações de código) leva mais de 5 segundos. Então, faço uma alteração em um arquivo HTML/HBS ou JS, salvo e preciso recarregar o aplicativo [edição: atualizar o navegador], aguardando mais de 5 segundos para ver a mudança.

Existe alguma maneira de fazer o recarregamento automático (ou seja, atualização automática da visualização local) para o desenvolvimento de plugins do Discourse local?

Parece que os arquivos CSS são atualizados automaticamente, mas não os arquivos HTML/HBS ou JS.

Embora eu esteja observando para ver se há alguma dica, acho que é assim mesmo. E pelo que tenho visto, é muito pior no Mac.

2 curtidas

E aí, pessoal,

Com bastante confiança, você só precisará reiniciar o servidor se a sua API tiver sido alterada — ou seja, o seu código Ruby on Rails.

Se você só alterou os arquivos Javascript ou HBS, basta atualizar o navegador para ver as mudanças.

Você deve ter percebido que alterações nos arquivos CSS nem sequer exigem isso! :slight_smile:

3 curtidas

Estou falando aqui sobre atualizar o navegador e se o hot reload está disponível para evitar ter que fazer isso. É a atualização do navegador que leva mais de 5 segundos para visualizar qualquer alteração.

Se eu tiver que parar e recarregar o servidor (no caso de alterar o plugin.rb, por exemplo), isso provavelmente leva 60 segundos.

O hot reload é, claro, o padrão para desenvolvimento com muitas tecnologias hoje (estou mais familiarizado com o Angular, que tem esse padrão) e é incrível para o desenvolvimento. Acredito que no Rails seja possível através do webpack (mas não tenho certeza sobre isso). Minha sensação é que o hot reload não está disponível para o desenvolvimento do Discourse, mas queria confirmar, porque seria incrível se estivesse disponível.

Você precisa atualizar o navegador para carregar os arquivos JavaScript atualizados

2 curtidas

Isso estará disponível em breve com a EmberCLI: Coming to a Discourse near you!

8 curtidas

Na verdade, você já pode usar o Ember CLI com o Discourse master para obter esse comportamento!

6 curtidas

Isso parece ótimo, obrigado. Para usar isso para desenvolvimento local, há algo que eu precise fazer além de baixar a versão mais recente do Discourse do GitHub para o meu computador?

1 curtida

Você precisará verificar o último Discourse e fazer algo assim:

  1. Inicie o servidor da API: rails s

  2. Inicie o servidor Ember:

    1. Entre na pasta correta cd app/assets/javascript/discourse
    2. Instale os pacotes yarn
    3. Execute o Ember CLI: ember serve --proxy "http://localhost:3000"

Em seguida, você pode abrir http://localhost:4200 e deverá estar rodando no Ember CLI com recarregamento automático.

8 curtidas

Estava animado para atualizar minha instância local do Discourse e agora estou executando a versão 2.8 localmente. No entanto, ainda não consegui fazer o hot reload funcionar para alterações em HTML e JS.

Veja como executo os comandos:

cd para a pasta do Discourse localmente

$ redis-server //inicia o servidor

$ rails s //inicia o aplicativo Rails

$ yarn //executo apenas isso na primeira vez, imagino

$ bin/ember-cli //inicia o Ember CLI. O comando ember serve --proxy "http://localhost:3000" me deu erros por algum motivo

Isso faz com que o aplicativo seja executado com sucesso em localhost:4200.

Adicionei um plugin à instância local do Discourse, que é exibido com sucesso em localhost:4200. No entanto, se fizer alterações nos arquivos HTML ou JS, essas alterações só aparecem no aplicativo rodando localmente se eu atualizar o navegador.

Preciso fazer algo mais para que o hot reload funcione?

2 curtidas

Olá. O hot-reload está disponível com o ember-cli no Discourse? Ainda estou enfrentando o mesmo problema que mencionei em minha postagem anterior. Seguindo aquelas instruções, ainda não tenho hot-reload (ou seja, ainda preciso recarregar o navegador para ver as alterações no HTML e no JavaScript, e a saída do ember-cli no terminal não parece registrar quando salvo após uma alteração em um arquivo).

O recarregamento automático continua não funcionando para mim. Há algo além dessas etapas que eu precise fazer?

O que eu faço é:

./bin/rails s

Em um terminal e

./bin/ember_cli

Em outro.

Sim. Obrigado. Eu também faço isso. Você recebe recarregamento automático (hot reload) para arquivos HTML e JS?

Você quer dizer arquivos hbs?

Sim, não entendo o que acredito ser chamado de “liveReload” no navegador, apesar?:

image

E da presença de:

<script type="text/javascript" src="http://localhost:4200/_lr/livereload.js?port=4200&amp;host=localhost&amp;path=_lr/livereload"></script>

e

<script src="/ember-cli-live-reload.js" type="text/javascript"></script>

Sim—eu quis dizer arquivos HBS.

Aprecia-ria muito poder contar com o recarregamento automático (especialmente para arquivos JavaScript). Quando programo em outros contextos, onde o recarregamento automático é padrão, ele torna o processo de codificação muito mais rápido e divertido.

1 curtida

Algumas informações adicionais:

ember-cli/ember-cli-inject-live-reload: Plugin do Ember CLI que injeta o script de live-reload no conteúdo HTML (github.com)

“O livereload.js inicia uma conexão websocket de volta para o Ember CLI. Isso permite que o Ember CLI notifique o navegador para acionar uma atualização após alterações no JavaScript ou nos estilos.”

Estou curioso sobre o motivo pelo qual o navegador ignora isso — será que é uma opção no navegador relacionada à segurança do site?

Não tenho certeza, mas com certeza consegui recarregamento automático no navegador em outros contextos e com outras frameworks. (Não sei sobre o Ember — só o usei para desenvolver coisas do Discourse.)

Tenho interesse em saber se o recarregamento automático é esperado. Parece que sim, pela discussão anterior. Nesse caso, me pergunto se a equipe do Discourse tem o recarregamento automático e se estão fazendo algo que eu não estou.

1 curtida

A presença dos scripts é certamente um sinal de intenção; nada aqui é por acaso?

Então, estou me perguntando se se trata de um problema de configuração local do navegador ou de alguma outra configuração.

Mais informações sobre o livereload.js: livereload/livereload-js: Código JavaScript do LiveReload que se comunica com o servidor e implementa a recarga (github.com)

Certamente seria bom receber uma declaração oficial sobre o grau em que a recarga ao vivo deve funcionar aqui e se vai além do CSS no lado do cliente.

1 curtida

A atualização automática da página é tratada pelo ember CLI. No momento, os ativos de tema e plugin são compilados e servidos pela aplicação Rails, e não pelo ember CLI. Portanto, alterações no tema/plugin não atualizam a página automaticamente.

Isso pode ser algo que possamos melhorar no futuro. Mas por enquanto, esse é o comportamento esperado.

5 curtidas