Skip to content

Commit 9f68016

Browse files
authored
fix(rspack): prevent vfs concurrency issues (#504)
1 parent d030f28 commit 9f68016

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

src/rspack/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export function getRspackPlugin<UserOptions = Record<string, never>>(
5656
if (plugin.resolveId) {
5757
const vfs = new FakeVirtualModulesPlugin(plugin)
5858
vfs.apply(compiler)
59-
plugin.__vfsModules = new Set()
59+
plugin.__vfsModules = new Map()
6060
plugin.__vfs = vfs as any
6161

6262
compiler.hooks.compilation.tap(plugin.name, (compilation, { normalModuleFactory }) => {
@@ -105,8 +105,14 @@ export function getRspackPlugin<UserOptions = Record<string, never>>(
105105
// we treat it as a virtual module
106106
if (!fs.existsSync(resolved)) {
107107
if (!plugin.__vfsModules!.has(resolved)) {
108-
plugin.__vfsModules!.add(resolved)
109-
await vfs.writeModule(resolved)
108+
const fsPromise = vfs.writeModule(resolved)
109+
plugin.__vfsModules!.set(resolved, fsPromise)
110+
await fsPromise
111+
}
112+
else {
113+
// Ensure that the module is written to the virtual file system
114+
// before we use it.
115+
await plugin.__vfsModules!.get(resolved)
110116
}
111117
resolved = encodeVirtualModuleId(resolved, plugin)
112118
}

src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export interface UnpluginOptions {
147147
export interface ResolvedUnpluginOptions extends UnpluginOptions {
148148
// injected internal objects
149149
__vfs?: VirtualModulesPlugin
150-
__vfsModules?: Set<string>
150+
__vfsModules?: Map<string, Promise<string>>
151151
__virtualModulePrefix: string
152152
}
153153

src/webpack/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function getWebpackPlugin<UserOptions = Record<string, never>>(
5454
vfs = new VirtualModulesPlugin()
5555
compiler.options.plugins.push(vfs)
5656
}
57-
plugin.__vfsModules = new Set()
57+
plugin.__vfsModules = new Map()
5858
plugin.__vfs = vfs
5959

6060
const resolverPlugin: ResolvePluginInstance = {
@@ -135,7 +135,7 @@ export function getWebpackPlugin<UserOptions = Record<string, never>>(
135135
// https://github.com/unjs/unplugin/pull/155
136136
if (!plugin.__vfsModules!.has(resolved)) {
137137
plugin.__vfs!.writeModule(resolved, '')
138-
plugin.__vfsModules!.add(resolved)
138+
plugin.__vfsModules!.set(resolved, Promise.resolve(''))
139139
}
140140
}
141141

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy