From 4c50b7271afdf12ac7787f796bdb4d873e0f0912 Mon Sep 17 00:00:00 2001 From: harpsealjs Date: Thu, 30 Jul 2026 00:25:33 +0800 Subject: [PATCH 1/2] perf(runtime): preserve createRequire external name --- .../src/runtime/hot_module_replacement.ejs | 4 ++-- .../__snapshots__/esm.snap.txt | 17 +++++++++++++++++ .../runtimeModeSnapshot/esm.snap.txt | 17 +++++++++++++++++ .../externals/create-require-name/index.js | 7 +++++++ .../create-require-name/rspack.config.js | 6 ++++++ .../create-require-name/test.config.js | 8 ++++++++ 6 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/esm.snap.txt create mode 100644 tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/runtimeModeSnapshot/esm.snap.txt create mode 100644 tests/rspack-test/esmOutputCases/externals/create-require-name/index.js create mode 100644 tests/rspack-test/esmOutputCases/externals/create-require-name/rspack.config.js create mode 100644 tests/rspack-test/esmOutputCases/externals/create-require-name/test.config.js diff --git a/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs b/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs index 72278b84e5d3..223d9c67dbad 100644 --- a/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs +++ b/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs @@ -22,7 +22,7 @@ <% } %> <%- INTERCEPT_MODULE_EXECUTION %>.push(function (options) { var module = options.module; - var require = createRequire(options.require, options.id<% if (_is_rspack_runtime_mode) { %>, options.context<% } %>); + var require = __rspack_hmr_createRequire(options.require, options.id<% if (_is_rspack_runtime_mode) { %>, options.context<% } %>); module.hot = createModuleHotObject(options.id, module); module.parents = currentParents; module.children = []; @@ -34,7 +34,7 @@ <%- define(HMR_DOWNLOAD_UPDATE_HANDLERS) %> = {}; <%- define(HMR_INVALIDATE_MODULE_HANDLERS) %> = {}; -<%- fn("createRequire") %>(require, moduleId<% if (_is_rspack_runtime_mode) { %>, context<% } %>) { +<%- fn("__rspack_hmr_createRequire") %>(require, moduleId<% if (_is_rspack_runtime_mode) { %>, context<% } %>) { var me = hmrInstalledModules[moduleId]; if (!me) return require; var fn = function (request) { diff --git a/tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/esm.snap.txt b/tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/esm.snap.txt new file mode 100644 index 000000000000..f933df9ec1ed --- /dev/null +++ b/tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/esm.snap.txt @@ -0,0 +1,17 @@ +```mjs title=main.mjs +import { createRequire } from "node:module"; + +// node:module + +// ./index.js + + +const createRequireName = createRequire.name; + +it("should preserve a collision-free external import name", () => { + expect(createRequireName).toBe("createRequire"); +}); + +export { createRequireName }; + +``` \ No newline at end of file diff --git a/tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/runtimeModeSnapshot/esm.snap.txt b/tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/runtimeModeSnapshot/esm.snap.txt new file mode 100644 index 000000000000..f933df9ec1ed --- /dev/null +++ b/tests/rspack-test/esmOutputCases/externals/create-require-name/__snapshots__/runtimeModeSnapshot/esm.snap.txt @@ -0,0 +1,17 @@ +```mjs title=main.mjs +import { createRequire } from "node:module"; + +// node:module + +// ./index.js + + +const createRequireName = createRequire.name; + +it("should preserve a collision-free external import name", () => { + expect(createRequireName).toBe("createRequire"); +}); + +export { createRequireName }; + +``` \ No newline at end of file diff --git a/tests/rspack-test/esmOutputCases/externals/create-require-name/index.js b/tests/rspack-test/esmOutputCases/externals/create-require-name/index.js new file mode 100644 index 000000000000..09241a76e62c --- /dev/null +++ b/tests/rspack-test/esmOutputCases/externals/create-require-name/index.js @@ -0,0 +1,7 @@ +import { createRequire } from "node:module"; + +export const createRequireName = createRequire.name; + +it("should preserve a collision-free external import name", () => { + expect(createRequireName).toBe("createRequire"); +}); diff --git a/tests/rspack-test/esmOutputCases/externals/create-require-name/rspack.config.js b/tests/rspack-test/esmOutputCases/externals/create-require-name/rspack.config.js new file mode 100644 index 000000000000..d20e6a8db0ff --- /dev/null +++ b/tests/rspack-test/esmOutputCases/externals/create-require-name/rspack.config.js @@ -0,0 +1,6 @@ +module.exports = { + externalsType: 'modern-module', + externals: { + 'node:module': 'node:module', + }, +}; diff --git a/tests/rspack-test/esmOutputCases/externals/create-require-name/test.config.js b/tests/rspack-test/esmOutputCases/externals/create-require-name/test.config.js new file mode 100644 index 000000000000..9622d83b6d39 --- /dev/null +++ b/tests/rspack-test/esmOutputCases/externals/create-require-name/test.config.js @@ -0,0 +1,8 @@ +module.exports = { + snapshotContent(content) { + expect(content).toContain( + 'import { createRequire } from "node:module";', + ); + return content; + }, +}; From dcb8042ed2bb6d0546cc7a747b69ebbc02f0f601 Mon Sep 17 00:00:00 2001 From: harpsealjs Date: Thu, 30 Jul 2026 10:38:24 +0800 Subject: [PATCH 2/2] refactor(runtime): use camelCase HMR helper name --- .../rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs b/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs index 223d9c67dbad..eaf5adb32db0 100644 --- a/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs +++ b/crates/rspack_plugin_hmr/src/runtime/hot_module_replacement.ejs @@ -22,7 +22,7 @@ <% } %> <%- INTERCEPT_MODULE_EXECUTION %>.push(function (options) { var module = options.module; - var require = __rspack_hmr_createRequire(options.require, options.id<% if (_is_rspack_runtime_mode) { %>, options.context<% } %>); + var require = rspackHmrCreateRequire(options.require, options.id<% if (_is_rspack_runtime_mode) { %>, options.context<% } %>); module.hot = createModuleHotObject(options.id, module); module.parents = currentParents; module.children = []; @@ -34,7 +34,7 @@ <%- define(HMR_DOWNLOAD_UPDATE_HANDLERS) %> = {}; <%- define(HMR_INVALIDATE_MODULE_HANDLERS) %> = {}; -<%- fn("__rspack_hmr_createRequire") %>(require, moduleId<% if (_is_rspack_runtime_mode) { %>, context<% } %>) { +<%- fn("rspackHmrCreateRequire") %>(require, moduleId<% if (_is_rspack_runtime_mode) { %>, context<% } %>) { var me = hmrInstalledModules[moduleId]; if (!me) return require; var fn = function (request) {