Ricaricamento a caldo per lo sviluppo di plugin?

Ciao a tutti. Scusate se la questione è già stata affrontata (non l’ho trovata):

Lo sviluppo di un plugin Discourse sul mio computer locale tende ad essere piuttosto lento. Ogni ricarica della mia app in esecuzione locale (per visualizzare le modifiche al codice) richiede oltre 5 secondi. Quindi, effettuo una modifica in un file html/hbs o js, salvo, poi devo ricaricare l’app [edit: aggiornare il browser] e attendere 5 secondi o più per vedere la modifica.

Esiste un modo per abilitare il hot reload (cioè l’aggiornamento automatico della visualizzazione locale) durante lo sviluppo locale di plugin Discourse?

Sembra che i file CSS vengano aggiornati automaticamente, ma non i file html/hbs o js.

Anche se sto osservando per vedere se ci sono qualche indizio, penso che sia semplicemente così. E da quello che ho visto, su Mac è molto peggio.

Ciao a tutti,

Dovreste poter riavviare il server solo se avete modificato l’API, ovvero il codice Ruby on Rails.

Se avete cambiato solo i file Javascript o HBS, potete semplicemente vedere le modifiche aggiornando il browser.

Avrete notato che le modifiche ai file CSS non richiedono nemmeno questo! :slight_smile:

Sto parlando qui dell’aggiornamento del browser e se il hot reload sia disponibile per evitare di doverlo fare. È l’aggiornamento del browser che richiede oltre 5 secondi per visualizzare qualsiasi modifica.

Se devo fermarmi e ricaricare il server (nel caso in cui modifichi plugin.rb, per esempio), ciò probabilmente richiede 60 secondi.

Il hot reload è ovviamente lo standard per lo sviluppo con molte tecnologie oggi (sono più familiare con Angular, che ha questo standard) ed è fantastico per lo sviluppo. Credo che con Rails sia possibile tramite webpack (ma non ne sono sicuro). La mia sensazione è che il hot reload non sia disponibile per lo sviluppo di Discourse, ma volevo verificare perché sarebbe fantastico se lo fosse.

È necessario aggiornare il browser per caricare i file JavaScript aggiornati

Questo arriverà con EmberCLI: Coming to a Discourse near you!

Infatti puoi usare Ember CLI con la versione master di Discourse proprio ora per ottenere questo comportamento!

Sembra ottimo, grazie. Per utilizzarlo per lo sviluppo locale, c’è qualcosa che devo fare oltre a scaricare l’ultima versione di Discourse da GitHub sul mio computer?

Dovrai controllare l’ultima versione di Discourse e poi procedere in questo modo:

  1. Avvia il server API: rails s

  2. Avvia il server Ember:

    1. Entra nella cartella corretta cd app/assets/javascript/discourse
    2. Installa i pacchetti yarn
    3. Esegui Ember CLI: ember serve --proxy "http://localhost:3000"

A quel punto potrai aprire http://localhost:4200 e dovresti essere in esecuzione con Ember CLI e il ricaricamento a caldo.

Ero entusiasta di aggiornare la mia istanza locale di Discourse e ora sto eseguendo la versione 2.8 in locale. Tuttavia, non riesco ancora a far funzionare il hot reload per le modifiche a HTML e JavaScript.

Ecco come eseguo le operazioni:

Vado nella cartella di Discourse in locale

$ redis-server //avvia il server

$ rails s //avvia l’app Rails

$ yarn //da eseguire solo la prima volta, presumo

$ bin/ember-cli //avvia Ember CLI. Il comando ember serve --proxy "http://localhost:3000" mi ha restituito errori per qualche motivo

Questo avvia correttamente l’app su localhost:4200.

Ho aggiunto un plugin alla mia istanza locale di Discourse, che viene visualizzato correttamente su localhost:4200. Tuttavia, se apporto modifiche ai file HTML o JavaScript, queste modifiche vengono visualizzate nell’app in esecuzione in locale solo se ricarico il browser.

Devo fare qualcos’altro per far funzionare il hot reload?

Ciao. Hot-reload è disponibile con ember-cli in Discourse? Sto ancora riscontrando lo stesso problema menzionato nel mio post precedente. Seguendo quelle istruzioni, non ottengo ancora hot-reload (cioè, devo ancora aggiornare il browser per vedere le modifiche a HTML e JavaScript, e l’output di ember-cli nel terminale non sembra registrarsi quando premo salva dopo una modifica al file).

Il ricaricamento a caldo continua a non funzionare per me. C’è qualcos’altro oltre a questi passaggi che devo fare?

Quello che faccio è

./bin/rails s

in una shell e

./bin/ember_cli

in un’altra.

Sì. Grazie. Lo faccio anch’io. Ricevi il hot reloading (cioè automatico) per i file HTML e JS?

Intendi i file hbs?

Sì, non capisco cosa io creda sia chiamato “liveReload” nel browser, nonostante?:

image

E la presenza di:

<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>

Sì, intendevo i file HBS.

Apprezzerei davvero molto poter disporre del ricaricamento in tempo reale (soprattutto per i file JavaScript). Quando programmo in altri contesti, dove il ricaricamento in tempo reale è lo standard, questa funzionalità rende il processo di codifica molto più veloce e divertente.

Alcune informazioni aggiuntive:

ember-cli/ember-cli-inject-live-reload: Plugin Ember CLI che inietta lo script di live-reload nel contenuto HTML (github.com)

livereload.js avvia una connessione websocket verso Ember CLI. Questo permette a Ember CLI di notificare al browser di attivare un aggiornamento dopo modifiche al JavaScript o agli stili.”

Sono curioso di sapere perché il browser ignora questo: mi chiedo se sia un’opzione nel browser relativa alla sicurezza del sito?

Non ne sono sicuro, ma sono riuscito a ottenere il ricaricamento automatico nel browser in altri contesti o con altri framework. (Non so per quanto riguarda Ember; l’ho usato solo per sviluppare cose relative a Discourse.)

Sono interessato a sapere se il ricaricamento automatico è previsto. Sembra di sì, dalla discussione precedente. In tal caso, mi chiedo se il team di Discourse abbia il ricaricamento automatico e se stiano facendo qualcosa che io non sto facendo.

La presenza degli script è sicuramente un segno di intenzione; qui nulla è dovuto al caso?

Quindi mi chiedo se si tratti di un problema di configurazione del browser locale o di qualche altra configurazione.

Ulteriori informazioni su livereload.js: livereload/livereload-js: Codice JavaScript LiveReload che comunica con il server e implementa il ricaricamento (github.com)

Sarebbe certamente utile ricevere una comunicazione ufficiale sulla misura in cui il live reload dovrebbe funzionare qui e se vada oltre il CSS sul lato client.

L’aggiornamento automatico della pagina è gestito da Ember CLI. Al momento, le risorse di tema e plugin sono compilate e fornite dall’app Rails, non da Ember CLI. Di conseguenza, le modifiche al tema o ai plugin non aggiornano automaticamente la pagina.

Questo è qualcosa che potremmo migliorare in futuro. Ma per ora, è un comportamento previsto.