diff --git a/crates/rspack_core/src/compiler/make/cutout/mod.rs b/crates/rspack_core/src/compiler/make/cutout/mod.rs index fdc76bbd2618..eb3e09fb44bc 100644 --- a/crates/rspack_core/src/compiler/make/cutout/mod.rs +++ b/crates/rspack_core/src/compiler/make/cutout/mod.rs @@ -73,11 +73,9 @@ impl Cutout { if module.depends_on(&files) { // add module id force_build_modules.insert(module.identifier()); - // process parent module id + // process module dependencies for connect in module_graph.get_incoming_connections(&module.identifier()) { - if let Some(original_module_identifier) = connect.original_module_identifier { - force_build_modules.insert(original_module_identifier); - } + force_build_deps.insert(connect.dependency_id); } } } diff --git a/packages/rspack-test-tools/src/processor/watch.ts b/packages/rspack-test-tools/src/processor/watch.ts index 89c6da08e103..45a7d41261a5 100644 --- a/packages/rspack-test-tools/src/processor/watch.ts +++ b/packages/rspack-test-tools/src/processor/watch.ts @@ -340,6 +340,8 @@ export class WatchStepProcessor< resolve(stats); }); }); + // wait compiler to ready watch the files and diretories + await new Promise(resolve => setTimeout(resolve, 100)); copyDiff( path.join(context.getSource(), this._watchOptions.stepName), this._watchOptions.tempDir, diff --git a/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/0/foo.js b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/0/foo.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/0/index.js b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/0/index.js new file mode 100644 index 000000000000..35709cd3bf23 --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/0/index.js @@ -0,0 +1,3 @@ +import("./foo.js").catch(() => { + +}); diff --git a/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/1/errors.js b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/1/errors.js new file mode 100644 index 000000000000..45ef44056c7a --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/1/errors.js @@ -0,0 +1,3 @@ +module.exports = [ + /Module not found: Can't resolve/ +] \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/1/foo.js b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/1/foo.js new file mode 100644 index 000000000000..1789ecf46aef --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/1/foo.js @@ -0,0 +1 @@ +DELETE \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/loader.js b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/loader.js new file mode 100644 index 000000000000..2e42d8070efb --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/loader.js @@ -0,0 +1,4 @@ +module.exports = function (source) { + this._module.buildInfo.timestamp = Date.now(); + return source; +} diff --git a/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/rspack.config.js b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/rspack.config.js new file mode 100644 index 000000000000..303e7ca64bb9 --- /dev/null +++ b/packages/rspack-test-tools/tests/watchCases/compilation/remove-module/rspack.config.js @@ -0,0 +1,40 @@ +const path = require("path"); + +class Plugin { + apply(compiler) { + const moduleMap = new Map(); + + compiler.hooks.compilation.tap("PLUGIN", compilation => { + compilation.hooks.finishModules.tap("PLUGIN", modules => { + for (const module of modules) { + if (moduleMap.has(module.resource)) { + const timestamp = moduleMap.get(module.resource); + // index.js only run loader by once. + expect(module.buildInfo.timestamp).toBe(timestamp); + } else { + moduleMap.set(module.resource, module.buildInfo.timestamp); + } + } + }); + }); + } +} + +module.exports = { + plugins: [ + new Plugin() + ], + module: { + rules: [ + { + test: /\.js$/, + use: [ + { + loader: path.join(__dirname, "loader.js"), + } + ] + } + ] + } +}; +