@@ -389,7 +389,7 @@ class Bundler extends EventEmitter {
389389 this . buildQueue . delete ( asset ) ;
390390 }
391391
392- createBundleTree ( asset , dep , bundle ) {
392+ createBundleTree ( asset , dep , bundle , parentBundles = new Set ( ) ) {
393393 if ( dep ) {
394394 asset . parentDeps . add ( dep ) ;
395395 }
@@ -405,7 +405,14 @@ class Bundler extends EventEmitter {
405405 this . moveAssetToBundle ( asset , commonBundle ) ;
406406 return ;
407407 }
408- } else return ;
408+ } else {
409+ return ;
410+ }
411+
412+ // Detect circular bundles
413+ if ( parentBundles . has ( asset . parentBundle ) ) {
414+ return ;
415+ }
409416 }
410417
411418 // Create the root bundle if it doesn't exist
@@ -444,15 +451,22 @@ class Bundler extends EventEmitter {
444451 }
445452
446453 asset . parentBundle = bundle ;
454+ parentBundles . add ( bundle ) ;
447455
448456 for ( let [ dep , assetDep ] of asset . depAssets ) {
449- this . createBundleTree ( assetDep , dep , bundle ) ;
457+ this . createBundleTree ( assetDep , dep , bundle , parentBundles ) ;
450458 }
451459
460+ parentBundles . delete ( bundle ) ;
452461 return bundle ;
453462 }
454463
455464 moveAssetToBundle ( asset , commonBundle ) {
465+ // Never move the entry asset of a bundle, as it was explicitly requested to be placed in a separate bundle.
466+ if ( asset . parentBundle . entryAsset === asset ) {
467+ return ;
468+ }
469+
456470 for ( let bundle of Array . from ( asset . bundles ) ) {
457471 bundle . removeAsset ( asset ) ;
458472 commonBundle . getSiblingBundle ( bundle . type ) . addAsset ( asset ) ;
0 commit comments