Skip to content

refactor: use ES module imports in browser core#4158

Open
KristjanESPERANTO wants to merge 3 commits into
MagicMirrorOrg:developfrom
KristjanESPERANTO:esm
Open

refactor: use ES module imports in browser core#4158
KristjanESPERANTO wants to merge 3 commits into
MagicMirrorOrg:developfrom
KristjanESPERANTO:esm

Conversation

@KristjanESPERANTO
Copy link
Copy Markdown
Collaborator

@KristjanESPERANTO KristjanESPERANTO commented May 17, 2026

With these changes a few browser-side core files now use native ES modules. Loader, MMSocket, Module and MM can be imported directly instead of being read off window. main.js and loader.js are no longer wrapped in IIFEs - they're just normal modules now.

Module, MM and MMSocket are still exposed as globals, so third-party modules that use the old API keep working.

The changes are mostly structural, behavior should stay the same. A few internal helpers in main.js got an underscore prefix because their names clashed with public MM methods.

Why

The old setup relied a lot on script order: a file could use Loader or MMSocket only because another script happened to put it on window first. Imports make that explicit.

The bigger goal is to move away from the legacy script-loading patterns - making it easier to understand and easier to test - in other words: easier to maintain.

More of the core could be "cleaned up" the same way, but that would blow up this PR.

For reviewing, I recommend to hide the whitespace changes.

Comment thread js/main.js Dismissed
Private helpers clashing with public MM methods get an underscore prefix.
globalThis.MM stays as a fallback for third-party modules.
@KristjanESPERANTO KristjanESPERANTO marked this pull request as ready for review May 17, 2026 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants