Introduzione di un nuovo sistema di build JS per il core di Discourse

Dopo aver modernizzato con successo i sistemi di build del tema e dei plugin nell’ultimo anno, siamo ora pronti a procedere con un aggiornamento simile nel core di Discourse.

Nonostante si tratti di una revisione completa del sistema di build del core, questa modifica è intesa per essere pienamente retrocompatibile. Le installazioni in produzione di Discourse non dovrebbero notare alcuna modifica. Il sistema di asset precompilati continuerà a garantire che i vostri server non debbano costruire autonomamente gli asset del core.

Tecnologie

Stiamo passando da ember-cli/webpack a rolldown, un bundler per JavaScript basato su Rust. Rolldown è il cuore dell’ultima versione di Vite, quindi siamo in buona compagnia e allineati con la direzione dell’ecosistema Ember.

Tutto il JavaScript di Discourse è ora costruito come Moduli ES nativi, il che porta a prestazioni di runtime migliorate e sblocca numerosi ottimizzazioni future.

Prestazioni di build

In fase di sviluppo, le build dovrebbero essere circa l’80% più veloci rispetto a prima. Sulla mia macchina[1], questo ha ridotto il tempo di avvio dello sviluppo da ~30s a ~5s. Ci aspettiamo che le prestazioni migliorino ulteriormente in futuro, poiché alcune parti della build si affidano ancora a tecnologie più vecchie come Babel.

Esperienza dello sviluppatore

Come parte di questo passaggio, abbiamo deciso di smettere di utilizzare un proxy davanti a Discourse per lo sviluppo. Lo sviluppo deve ora essere eseguito direttamente sul server Rails.

bin/ember-cli -u è stato sostituito da bin/dev. Questo avvierà Rails sulla porta :3000 ed eseguirà la build di rolldown in background. L’output dei log di entrambi i processi verrà mostrato con un prefisso appropriato. Dovreste visitare :3000 nel vostro browser. La porta :4200 non servirà più nulla.

Per facilitare la migrazione, bin/ember-cli è ora un shim retrocompatibile. Visualizzerà le informazioni di aiuto e avvierà un server leggero sulla porta :4200 con istruzioni per passare alla porta :3000.

Se preferite avviare Rails e la build JS come comandi separati, potete ancora farlo. I comandi di avvio di Rails sono invariati, e il bundler rolldown può essere eseguito in modalità watch utilizzando bin/dev --only ember.

Avvisi di build obsoleti

Se la build attualmente presente sul disco è stata prodotta utilizzando il bundler di sviluppo rolldown e tale processo non è più in esecuzione, Rails lancerà un errore per avvisarvi che gli asset sono obsoleti. Questo si applica alla modalità di sviluppo e ai test di sistema.

Questo errore non verrà lanciato se utilizzate il comando di build one-shot (pnpm build) come facciamo in CI.

Grazie!

Questo lavoro è stato reso possibile dai team di Ember/Embroider e da The Ember Initiative. Un ringraziamento speciale a @real_ate per il suo lavoro con noi su questo progetto! :tada:


  1. MacBook Pro con chip M3 Pro ↩︎

Wow! Che fantastico! :raising_hands:t3: