-
Notifications
You must be signed in to change notification settings - Fork 8.6k
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
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
This was a proof-of-concept for future work on plugins, and isn't needed for themes
CvX
approved these changes
Jul 24, 2025
CvX
approved these changes
Jul 24, 2025
Having it in the same plugin as extensionsearch caused problems
CvX
approved these changes
Jul 25, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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