fix: disable HMR for SSR transforms to prevent ERR_LOAD_URL#110
Merged
Brooooooklyn merged 2 commits intomainfrom Mar 14, 2026
Merged
fix: disable HMR for SSR transforms to prevent ERR_LOAD_URL#110Brooooooklyn merged 2 commits intomainfrom
Brooooooklyn merged 2 commits intomainfrom
Conversation
When Nitro or other SSR frameworks process server-side code through Vite's module runner, the HMR initialization code would dynamically import @ng/component virtual modules that are only served via HTTP middleware, causing ERR_LOAD_URL failures. - Check options.ssr in transform hook and disable HMR for SSR bundles - Add resolveId/load hooks for @ng/component as safety net in SSR context - Skip file watcher registration for SSR transforms This matches Angular's official behavior where _enableHmr is only set for browser bundles, never for SSR bundles. - Close #109 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fe93bae3eb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The fs.watch callback serves dual purpose: (1) invalidating resourceCache on file change, and (2) sending HMR WebSocket events. The HMR part is already independently gated by componentIds, which are only populated for client transforms. Skipping watcher registration for SSR would leave resourceCache stale when external templates/styles change. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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
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.

When Nitro or other SSR frameworks process server-side code through
Vite's module runner, the HMR initialization code would dynamically
import @ng/component virtual modules that are only served via HTTP
middleware, causing ERR_LOAD_URL failures.
This matches Angular's official behavior where _enableHmr is only set
for browser bundles, never for SSR bundles.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Note
Medium Risk
Touches Vite transform and module resolution behavior for SSR vs client builds; mis-detection of
ssror the new virtual-module handling could change dev-server/SSR runtime behavior.Overview
Prevents SSR bundles from including Angular HMR bootstrapping that imports
@ng/componentvirtual modules, by passing Vite’soptions.ssrinto the transform handler and forcinghmr: falsefor SSR transforms.Adds an SSR-only
resolveId/loadsafety net for@ng/componentto return an empty virtual module when Vite’s module runner resolves these imports, avoidingERR_LOAD_URLcrashes in Nitro/SSR environments.Introduces new
ssr-hmr.test.tscoverage asserting HMR code is injected only when explicitly enabled and thathmr: falseyields no template updates or@ng/componentreferences.Written by Cursor Bugbot for commit 153de34. This will update automatically on new commits. Configure here.