Nach der erfolgreichen Modernisierung der Theme- und Plugin-Build-Systeme im vergangenen Jahr sind wir nun bereit, ein ähnliches Upgrade im Kern von Discourse voranzutreiben.
Obwohl dies eine vollständige Überarbeitung des Kern-Build-Systems darstellt, soll diese Änderung vollständig abwärtskompatibel sein. Produktive Discourse-Installationen sollten keine Änderungen bemerken. Das System der vorkompilierten Assets bleibt bestehen, sodass Ihre Server die Kern-Assets nicht selbst erstellen müssen.
Technologien
Wir wechseln von ember-cli/webpack zu rolldown, einem auf Rust basierenden JavaScript-Bundler. Rolldown ist das Herzstück der neuesten Version von Vite, sodass wir in guter Gesellschaft sind und uns an die Richtung des Ember-Ökosystems anpassen.
Der gesamte JavaScript-Code von Discourse wird nun als native ES-Module erstellt, was die Laufzeitleistung verbessert und eine Reihe zukünftiger Optimierungen ermöglicht.
Build-Leistung
In der Entwicklung sollten Builds etwa 80 % schneller sein als zuvor. Auf meinem Gerät[1] hat sich die Startzeit für die Entwicklung von ~30 s auf ~5 s verkürzt. Wir erwarten, dass sich die Leistung in Zukunft weiter verbessert, da einige Teile des Builds noch auf ältere Technologien wie Babel angewiesen sind.
Entwicklererfahrung
Im Rahmen dieses Wechsels haben wir beschlossen, für die Entwicklung keinen Proxy mehr vor Discourse zu verwenden. Die Entwicklung sollte nun direkt gegen den Rails-Server erfolgen.
bin/ember-cli -u wurde durch bin/dev ersetzt. Dies startet Rails auf :3000 und führt den Rolldown-Build im Hintergrund aus. Die Logausgabe beider Prozesse wird mit einem entsprechenden Präfix angezeigt. Besuchen Sie :3000 in Ihrem Browser. :4200 wird nichts mehr bereitstellen.
Um die Migration zu erleichtern, ist bin/ember-cli nun ein abwärtskompatibler Shim. Er zeigt Hilfeinformationen an und startet einen leichten Server auf :4200 mit Anweisungen zum Wechsel zu :3000.
Wenn Sie Rails und den JS-Build lieber als separate Befehle starten möchten, können Sie dies weiterhin tun. Die Rails-Startbefehle bleiben unverändert, und der Rolldown-Bundler kann im Watch-Modus mit bin/dev --only ember ausgeführt werden.
Warnungen bei veralteten Builds
Wenn der aktuell auf der Festplatte vorhandene Build vom Rolldown-Entwicklungsbundler erstellt wurde und dieser Prozess nicht mehr läuft, wirft Rails einen Fehler, um Sie darauf hinzuweisen, dass die Assets veraltet sind. Dies gilt für den Entwicklungsmodus und Systemtests.
Dieser Fehler wird nicht ausgelöst, wenn Sie den One-Shot-Build-Befehl (pnpm build) verwenden, wie wir es in CI tun.
Danke!
Diese Arbeit wurde durch die Teams von Ember/Embroider und The Ember Initiative ermöglicht. Besonderer Dank gilt @real_ate für seine Arbeit mit uns an diesem Projekt! ![]()
MacBook Pro mit M3 Pro-Chip ↩︎