Skip to content

DEV: Use rollup for theme JS compilation #33103

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 97 commits into from
Jul 25, 2025
Merged

Conversation

davidtaylorhq
Copy link
Member

@davidtaylorhq davidtaylorhq commented Jun 6, 2025

This commit is a complete reimplementation of our theme JS compilation system.

Previously, we compiled theme JS into AMD define statements on a per-source-file basis, and then concatenated them together for the client. These AMD modules would integrate with those in Discourse core, allowing two way access between core/theme modules. Going forward, we'll be moving away from AMD, and towards native ES modules in core. Before we can do that, we need to stop relying on AMD as the 'glue' between core and themes/plugins.

This change introduces Rollup (running in mini-racer) as a compiler for theme JS. This is configured to generate a single ES Module which exports a list of 'compat modules'. Core import()s the modules for each active theme, and adds them all to AMD. In future, this consumption can be updated to avoid AMD entirely.

All module resolution within a theme is handled by Rollup, and does not use AMD.

Import of core/plugin modules from themes are automatically transformed into calls to a new window.moduleBroker interface. For now, this is a direct interface to AMD. In future, this can be updated to point to real ES Modules in core.

Despite the complete overhaul of the internals, this is not a breaking change, and should have no impact on existing themes. If any incompatibilities are found, please report them on https://meta.discourse.org.


Co-authored-by: Jarek Radosz jradosz@gmail.com
Co-authored-by: Chris Manson chris@manson.ie

davidtaylorhq added a commit that referenced this pull request Jun 6, 2025
Theme translations are very simple JS, and do not need to be run through the theme transpiler. This brings their format in-line with core/plugin translations.

Extracted from #33103
@davidtaylorhq davidtaylorhq changed the title WIP: Using rollup for theme JS compilation DEV: Use rollup for theme JS compilation Jul 24, 2025
@davidtaylorhq davidtaylorhq marked this pull request as ready for review July 25, 2025 10:27
@davidtaylorhq davidtaylorhq merged commit aa2fb29 into main Jul 25, 2025
28 of 29 checks passed
@davidtaylorhq davidtaylorhq deleted the rollup-theme-experiment branch July 25, 2025 11:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

2 participants