From 9b31ac8827a992d8ffab1acf7313c23b91020daa Mon Sep 17 00:00:00 2001 From: Adrian Bannister Date: Mon, 9 Mar 2026 12:20:04 +1100 Subject: [PATCH] fix: do not hook assetEmitted when writeToDisk is true (#1) When `writeToDisk: true`, `setupOutputFileSystem` already configures webpack to use the native (disk) output file system, so webpack writes all assets to disk itself. Calling `setupWriteToDisk` on top of that tapped `assetEmitted` and wrote every file a second time. Only invoke `setupWriteToDisk` when `writeToDisk` is a filter function, where the in-memory fs is still used and selective disk writes are needed. Fixes #2270 --- src/index.js | 2 +- test/middleware.test.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index ccdc8fedc..8cc01b439 100644 --- a/src/index.js +++ b/src/index.js @@ -229,7 +229,7 @@ function wdm(compiler, options = {}) { setupHooks(context); - if (options.writeToDisk) { + if (typeof options.writeToDisk === "function") { setupWriteToDisk(context); } diff --git a/test/middleware.test.js b/test/middleware.test.js index 9400380c9..8d676b43d 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -4056,7 +4056,7 @@ describe.each([ compiler.hooks.assetEmitted.taps.filter( (hook) => hook.name === "DevMiddleware", ), - ).toHaveLength(1); + ).toHaveLength(0); expect(fs.existsSync(bundlePath)).toBe(true); instance.invalidate(); @@ -4068,7 +4068,7 @@ describe.each([ compiler.hooks.assetEmitted.taps.filter( (hook) => hook.name === "DevMiddleware", ), - ).toHaveLength(1); + ).toHaveLength(0); done(); }, @@ -4154,7 +4154,7 @@ describe.each([ compiler.hooks.assetEmitted.taps.filter( (hook) => hook.name === "DevMiddleware", ), - ).toHaveLength(1); + ).toHaveLength(0); expect(fs.existsSync(bundlePath)).toBe(true); instance.invalidate(); @@ -4166,7 +4166,7 @@ describe.each([ compiler.hooks.assetEmitted.taps.filter( (hook) => hook.name === "DevMiddleware", ), - ).toHaveLength(1); + ).toHaveLength(0); done(); },