Repository navigation
feat: apply webpack HMR updates while a debug app runs - #32
Merged
Merged
Conversation
The CLI syncs webpack's hot-update files into bin\app, but nothing told the running app to apply them, so every change restarted the app. Debug hosts now watch LocalState for an ns-livesync marker and call global.__onLiveSync() on the UI thread when it appears, which runs webpack's hot update, as the Android and iOS runtimes do after a LiveSync. The host writes ns-livesync-ready while it watches, so a CLI only relies on the marker when the app can act on it.
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This was referenced Oct 22, 2026
triniwiz
added a commit
to NativeScript/nativescript-cli
that referenced
this pull request
Oct 23, 2026
…6174) tryRefreshApplication returned false for webpack, so every change restarted the app even though the hot-update files were already in bin\app. After a sync, the CLI now writes an ns-livesync marker into the app's LocalState. The debug host watches for it and calls global.__onLiveSync(), which runs webpack's hot update (NativeScript/windows#32). The CLI only does this when the host has written ns-livesync-ready, so older hosts still restart. shouldRestart now also restarts on a full sync, as Android and iOS do. That is how the CLI recovers when a hot update fails.
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.
With webpack,
ns run windowssyncs the hot-update files intobin\app, but nothing tells the running app to apply them, so the CLI restarts the app on every change. On Android and iOS the runtime callsglobal.__onLiveSync()after a LiveSync, and webpack's HMR runtime hooks that to run its hot update.Changes
template/framework/__PROJECT_NAME__/RuntimeHost.cs(Debug builds only):WatchLiveSync(dispatcherQueue)watches the app's LocalState for anns-livesyncmarker. When the marker appears or changes, the host consumes it on the UI thread and runs__onLiveSync()throughruntime_runscript.ns-livesync-ready. The CLI only signals an app whose host wrote it, so a newer CLI with an older host still restarts as before. The ready marker is deleted at startup and on dispose.App.xaml.csstarts the watcher once the pump runs.The CLI side is NativeScript/nativescript-cli (against
feat/windows). It writes the marker after syncing, and now restarts on a full sync, which is how the CLI recovers from a hot update that fails.Testing
End to end on Windows 11 (Debug, x64): a TypeScript app on webpack 5.99.7, core and
@nativescript/webpackbuilt fromfeat/windows, this template, a currentnativescript.dlland the CLI branch:app.css: the CLI synced the hot-update files and logged "Refreshing application" with no restart. The app logged[HMR] success | Successfully applied update.with the same PID.app.ts(not hot-acceptable): the app logged[HMR] failure | A module has not been accepted., and the CLI then restarted the app (new PID), as on Android and iOS.I haven't built the published
@nativescript/windows-*packages from this template. TheNativeScriptWindowsDemoandTestAppcopies of the host are unchanged.