Thanks to visit codestin.com
Credit goes to github.com

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)