diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 32952d99b84..7967da65b16 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -141,7 +141,10 @@ export default new Bundler({ let assets = bundleGraph.getDependencyAssets(dependency); for (let asset of assets) { - if (bundleGraph.isAssetInAncestorBundles(bundle, asset)) { + if ( + bundle.hasAsset(asset) && + bundleGraph.isAssetInAncestorBundles(bundle, asset) + ) { bundleGraph.removeAssetGraphFromBundle(asset, bundle); } } diff --git a/packages/core/core/src/BundleGraph.js b/packages/core/core/src/BundleGraph.js index 53e9f116ada..2f4f1b4af92 100644 --- a/packages/core/core/src/BundleGraph.js +++ b/packages/core/core/src/BundleGraph.js @@ -103,11 +103,14 @@ export default class BundleGraph { removeAssetGraphFromBundle(asset: Asset, bundle: Bundle) { this._graph.removeEdge(bundle.id, asset.id); - this._graph.traverse(node => { - if (node.type === 'asset' || node.type === 'dependency') { + this.traverseBundle( + bundle, + node => { this._graph.removeEdge(bundle.id, node.id, 'contains'); - } - }, nullthrows(this._graph.getNode(asset.id))); + }, + false, + nullthrows(this._graph.getNode(asset.id)) + ); } createAssetReference(dependency: Dependency, asset: Asset): void { @@ -388,7 +391,8 @@ export default class BundleGraph { traverseBundle( bundle: Bundle, visit: GraphVisitor, - includeAll: boolean = false + includeAll: boolean = false, + startNode?: BundleGraphNode ): ?TContext { return this._graph.filteredTraverse( (node, actions) => { @@ -408,7 +412,7 @@ export default class BundleGraph { actions.skipChildren(); }, visit, - nullthrows(this._graph.getNode(bundle.id)) + startNode ?? nullthrows(this._graph.getNode(bundle.id)) ); }