@@ -188,22 +188,31 @@ export class ViteNodeRunner {
188188 if ( importee )
189189 mod . importers . add ( importee )
190190
191- // the callstack reference itself circularly
192- if ( callstack . includes ( fsPath ) && mod . exports )
193- return mod . exports
191+ const getStack = ( ) => `stack:\n${ [ ...callstack , fsPath ] . reverse ( ) . map ( p => ` - ${ p } ` ) . join ( '\n' ) } `
194192
195- // cached module
196- if ( mod . promise )
197- return mod . promise
193+ // check circular dependency
194+ if ( callstack . includes ( fsPath ) || callstack . some ( c => this . moduleCache . get ( c ) . importers ?. has ( fsPath ) ) ) {
195+ if ( mod . exports )
196+ return mod . exports
197+ }
198198
199- const promise = this . directRequest ( id , fsPath , callstack )
200- Object . assign ( mod , { promise, evaluated : false } )
199+ let debugTimer : any
200+ if ( this . debug )
201+ debugTimer = setTimeout ( ( ) => console . warn ( `[vite-node] module ${ fsPath } takes over 2s to load.\n${ getStack ( ) } ` ) , 2000 )
201202
202203 try {
204+ // cached module
205+ if ( mod . promise )
206+ return await mod . promise
207+
208+ const promise = this . directRequest ( id , fsPath , callstack )
209+ Object . assign ( mod , { promise, evaluated : false } )
203210 return await promise
204211 }
205212 finally {
206213 mod . evaluated = true
214+ if ( debugTimer )
215+ clearTimeout ( debugTimer )
207216 }
208217 }
209218
@@ -245,28 +254,7 @@ export class ViteNodeRunner {
245254
246255 /** @internal */
247256 async dependencyRequest ( id : string , fsPath : string , callstack : string [ ] ) {
248- const getStack = ( ) => {
249- return `stack:\n${ [ ...callstack , fsPath ] . reverse ( ) . map ( p => `- ${ p } ` ) . join ( '\n' ) } `
250- }
251-
252- let debugTimer : any
253- if ( this . debug )
254- debugTimer = setTimeout ( ( ) => console . warn ( ( ) => `module ${ fsPath } takes over 2s to load.\n${ getStack ( ) } ` ) , 2000 )
255-
256- try {
257- if ( callstack . includes ( fsPath ) ) {
258- const depExports = this . moduleCache . get ( fsPath ) ?. exports
259- if ( depExports )
260- return depExports
261- throw new Error ( `[vite-node] Failed to resolve circular dependency, ${ getStack ( ) } ` )
262- }
263-
264- return await this . cachedRequest ( id , fsPath , callstack )
265- }
266- finally {
267- if ( debugTimer )
268- clearTimeout ( debugTimer )
269- }
257+ return await this . cachedRequest ( id , fsPath , callstack )
270258 }
271259
272260 /** @internal */
0 commit comments