diff --git a/crates/rspack_plugin_javascript/src/plugin/runtime_context.rs b/crates/rspack_plugin_javascript/src/plugin/runtime_context.rs index 4fe9c880cc0e..4bf18f2c39ea 100644 --- a/crates/rspack_plugin_javascript/src/plugin/runtime_context.rs +++ b/crates/rspack_plugin_javascript/src/plugin/runtime_context.rs @@ -152,7 +152,6 @@ var module = ({module_cache}[moduleId] = {{"#, let module_cache = runtime_requirements.contains(RuntimeGlobals::MODULE_CACHE); let intercept_module_execution = runtime_requirements.contains(RuntimeGlobals::INTERCEPT_MODULE_EXECUTION); - let module_used = runtime_requirements.contains(RuntimeGlobals::MODULE); let has_custom_runtime_module = compilation .build_chunk_graph_artifact .chunk_graph @@ -167,6 +166,19 @@ var module = ({module_cache}[moduleId] = {{"#, || has_custom_runtime_module; let need_module_defer = runtime_requirements.contains(RuntimeGlobals::MAKE_DEFERRED_NAMESPACE_OBJECT); + let module_used = compilation + .build_chunk_graph_artifact + .chunk_graph + .get_chunk_entry_modules(chunk_ukey) + .iter() + .any(|module_identifier| { + ChunkGraph::get_module_runtime_requirements( + compilation, + *module_identifier, + chunk.runtime(), + ) + .is_some_and(|requirements| requirements.contains(RuntimeGlobals::MODULE)) + }); let use_require = require_function || intercept_module_execution || module_used; let mut header: Vec> = Vec::new(); let mut startup: Vec> = Vec::new(); diff --git a/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/index.js b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/index.js new file mode 100644 index 000000000000..8ccb05d867d1 --- /dev/null +++ b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/index.js @@ -0,0 +1,3 @@ +import logo from "./logo.svg"; + +export { logo }; diff --git a/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/logo.svg b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/logo.svg new file mode 100644 index 000000000000..0c3b1f64ed23 --- /dev/null +++ b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/rspack.config.js b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/rspack.config.js new file mode 100644 index 000000000000..1a3a5be89ad5 --- /dev/null +++ b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/rspack.config.js @@ -0,0 +1,26 @@ +const { + experiments: { RslibPlugin }, +} = require('@rspack/core'); + +/** @type {import("@rspack/core").Configuration} */ +module.exports = { + target: 'node', + experiments: { + runtimeMode: 'rspack', + }, + module: { + rules: [ + { + test: /\.svg$/, + type: 'asset/resource', + }, + ], + }, + output: { + iife: false, + library: { + type: 'commonjs-static', + }, + }, + plugins: [new RslibPlugin()], +}; diff --git a/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/test.config.js b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/test.config.js new file mode 100644 index 000000000000..477b0b7a03f2 --- /dev/null +++ b/tests/rspack-test/configCases/rslib/no-dead-require-bootstrap/test.config.js @@ -0,0 +1,12 @@ +const fs = require("fs"); + +/** @type {import("../../../..").TConfigCaseConfig} */ +module.exports = { + afterExecute(options) { + const source = fs.readFileSync(options.output.path + "/bundle0.js", "utf-8"); + + expect(source).not.toContain("function __rspack_require"); + expect(source).not.toContain("var __rspack_module_cache"); + expect(source).not.toContain("__rspack_modules[moduleId]"); + } +};