Scripts: Prevent react-refresh/runtime from being externalized in HMR mode#78498
Scripts: Prevent react-refresh/runtime from being externalized in HMR mode#78498theritiktiwari wants to merge 3 commits into
Conversation
|
Warning: Type of PR label mismatch To merge this PR, it requires exactly 1 label indicating the type of PR. Other labels are optional and not being checked here.
Read more about Type labels in Gutenberg. Don't worry if you don't have the required permissions to add labels; the PR reviewer should be able to help with the task. |
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Unlinked AccountsThe following contributors have not linked their GitHub and WordPress.org accounts: @daniDevKr. Contributors, please read how to link your accounts to ensure your work is properly credited in WordPress releases. If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message. To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
|
👋 Thanks for your first Pull Request and for helping build the future of Gutenberg and WordPress, @theritiktiwari! In case you missed it, we'd love to have you join us in our Slack community. If you want to learn more about WordPress development in general, check out the Core Handbook full of helpful information. |
What?
Closes #77293
Prevent
react-refresh/runtimefrom being externalized byDependencyExtractionWebpackPluginduring HMR mode.This ensures the generated
*.asset.phpfile does not include thewp-react-refresh-runtimedependency, which is not registered by WordPress and causes block scripts to fail in development mode.Why?
When running block development with HMR (
npx wp-scripts start --hot),ReactRefreshWebpackPlugininjects and managesreact-refresh/runtimeinternally.However,
DependencyExtractionWebpackPluginwas externalizing this runtime dependency and generating:Since WordPress never registers a corresponding
wp-react-refresh-runtimescript handle, the editor attempts to enqueue a missing dependency, causing the block script to fail to load during development.This issue only affects HMR/development mode.
How?
Pass a custom
requestToExternaloverride toDependencyExtractionWebpackPluginwhen React Fast Refresh is enabled. The override preventsreact-refresh/runtimefrom being externalized. This keeps the runtime managed entirely byReactRefreshWebpackPluginand prevents invalid WordPress script dependencies from being generated.Testing Instructions
@wordpress/create-block.*.asset.phpfile and observewp-react-refresh-runtimeinside the dependencies array.*.asset.phpfile no longer includeswp-react-refresh-runtime.Testing Instructions for Keyboard
Use of AI Tools
Used GH Copilot for assistance with debugging, and drafting PR documentation.