Skip to content

Commit 1543182

Browse files
committed
fix: skip certain files in pendingModules, timeout per file
fixes #249
1 parent ab0c22d commit 1543182

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

packages/vite-plugin/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ function vuetify (_options: Options = {}): Plugin[] {
88
const options: Options = {
99
autoImport: true,
1010
styles: true,
11-
stylesTimeout: 10000,
11+
stylesTimeout: 1000,
1212
..._options,
1313
}
1414

packages/vite-plugin/src/stylesPlugin.ts

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,48 +33,57 @@ export function stylesPlugin (options: Options): Plugin {
3333
if (!server) {
3434
await new Promise(resolve => setTimeout(resolve, 0))
3535
const modules = Array.from(context.getModuleIds())
36-
.filter(id => !blockingModules.has(id)) // Ignore the current file
36+
.filter(id => {
37+
return !blockingModules.has(id) && // Ignore the current file
38+
!/\w\.(s[ac]|c)ss/.test(id) // Ignore stylesheets
39+
})
3740
.map(id => context.getModuleInfo(id)!)
3841
.filter(module => module.code == null) // Ignore already loaded modules
3942

4043
pendingModules = modules.map(module => module.id)
44+
if (!pendingModules.length) return 0
45+
46+
const promises = modules.map(module => context.load(module))
47+
await Promise.race(promises)
4148

42-
return (await Promise.all(
43-
modules.map(module => context.load(module))
44-
)).map(module => module.id)
49+
return promises.length
4550
} else {
4651
const modules = Array.from(server.moduleGraph.urlToModuleMap.entries())
4752
.filter(([k, v]) => (
48-
v.transformResult == null &&
53+
v.transformResult == null && // Ignore already loaded modules
4954
!k.startsWith('/@id/') &&
50-
!blockingModules.has(v.id!)
55+
!/\w\.(s[ac]|c)ss/.test(k) && // Ignore stylesheets
56+
!blockingModules.has(v.id!) && // Ignore the current file
57+
!/\/node_modules\/\.vite\/deps\/(?!vuetify[._])/.test(k) // Ignore dependencies
5158
))
5259

5360
pendingModules = modules.map(([, v]) => v.id!)
61+
if (!pendingModules.length) return 0
5462

55-
return (await Promise.all(
56-
modules.map(([k, v]) => server.transformRequest(k).then(() => v))
57-
)).map(module => module.id!)
63+
const promises = modules.map(([k, v]) => server.transformRequest(k).then(() => v))
64+
await Promise.race(promises)
65+
66+
return promises.length
5867
}
5968
}
6069

6170
let timeout: NodeJS.Timeout
6271
async function awaitBlocking () {
63-
clearTimeout(timeout)
64-
timeout = setTimeout(() => {
65-
console.error('vuetify:styles fallback timeout hit', {
66-
blockingModules: Array.from(blockingModules.values()),
67-
pendingModules,
68-
pendingRequests: server._pendingRequests.keys()
69-
})
70-
resolve(false)
71-
}, options.stylesTimeout)
72-
7372
let pending
7473
do {
74+
clearTimeout(timeout)
75+
timeout = setTimeout(() => {
76+
console.error('vuetify:styles fallback timeout hit', {
77+
blockingModules: Array.from(blockingModules.values()),
78+
pendingModules,
79+
pendingRequests: server?._pendingRequests.keys()
80+
})
81+
resolve(false)
82+
}, options.stylesTimeout)
83+
7584
pending = await Promise.any<boolean | number | null>([
7685
promise,
77-
getPendingModules().then(v => v.length)
86+
getPendingModules()
7887
])
7988
debug(pending, 'pending modules', pendingModules)
8089
} while (pending)

0 commit comments

Comments
 (0)