diff --git a/packages/core/core/src/BundleGraph.js b/packages/core/core/src/BundleGraph.js index f17ef135267..94dddb16617 100644 --- a/packages/core/core/src/BundleGraph.js +++ b/packages/core/core/src/BundleGraph.js @@ -417,6 +417,7 @@ export default class BundleGraph { }; } + // eslint-disable-next-line no-unused-vars getReferencedBundle(dependency: Dependency, fromBundle: Bundle): ?Bundle { let dependencyNodeId = this._graph.getNodeIdByContentKey(dependency.id); @@ -436,24 +437,18 @@ export default class BundleGraph { }); } - // Otherwise, it may be a reference to another asset in the same bundle group. - // Resolve the dependency to an asset, and look for it in one of the referenced bundles. - let referencedBundles = this.getReferencedBundles(fromBundle, { - includeInline: true, - }); - let referenced = this._graph + // Otherwise, find an attached bundle via a reference edge (e.g. from createAssetReference). + let bundleNode = this._graph .getNodeIdsConnectedFrom( dependencyNodeId, bundleGraphEdgeTypes.references, ) .map(id => nullthrows(this._graph.getNode(id))) - .find(node => node.type === 'asset'); + .find(node => node.type === 'bundle'); - if (referenced != null) { - invariant(referenced.type === 'asset'); - return referencedBundles.find(b => - this.bundleHasAsset(b, referenced.value), - ); + if (bundleNode) { + invariant(bundleNode.type === 'bundle'); + return bundleNode.value; } } diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index 817f6c1f5ba..de60bceb491 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -2,11 +2,13 @@ import type {InitialParcelOptions, BuildSuccessEvent} from '@parcel/types'; import assert from 'assert'; import invariant from 'assert'; +import nullthrows from 'nullthrows'; import path from 'path'; import { assertBundles, bundler, run, + runBundle as runSingleBundle, overlayFS, outputFS, inputFS, @@ -149,9 +151,9 @@ describe('cache', function () { }); it('should support adding a dependency which changes the referenced bundles of a parent bundle', async function () { - async function exec(bundleGraph) { + async function exec(bundleGraph, bundle) { let calls = []; - await run(bundleGraph, { + await runSingleBundle(bundleGraph, nullthrows(bundle), { call(v) { calls.push(v); }, @@ -161,19 +163,28 @@ describe('cache', function () { let b = await testCache( { - entries: ['index.html'], + entries: ['a.html', 'b.html'], + mode: 'production', update: async b => { - assert.deepEqual(await exec(b.bundleGraph), ['a', 'b']); + let html = b.bundleGraph.getBundles().filter(b => b.type === 'html'); + assert.deepEqual(await exec(b.bundleGraph, html[0]), ['a']); + assert.deepEqual(await exec(b.bundleGraph, html[1]), ['b']); await overlayFS.writeFile( path.join(inputDir, 'a.js'), - 'import "./b.js"; call("a");', + 'import "./c.js"; call("a");', + ); + await overlayFS.writeFile( + path.join(inputDir, 'b.js'), + 'import "./c.js"; call("b");', ); }, }, 'cache-add-dep-referenced', ); - assert.deepEqual(await exec(b.bundleGraph), ['b', 'a']); + let html = b.bundleGraph.getBundles().filter(b => b.type === 'html'); + assert.deepEqual(await exec(b.bundleGraph, html[0]), ['c', 'a']); + assert.deepEqual(await exec(b.bundleGraph, html[1]), ['c', 'b']); }); it('should error when deleting a file', async function () { diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/index.html b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/a.html similarity index 57% rename from packages/core/integration-tests/test/integration/cache-add-dep-referenced/index.html rename to packages/core/integration-tests/test/integration/cache-add-dep-referenced/a.html index 1efba3d84ad..c85cb84ecfa 100644 --- a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/index.html +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/a.html @@ -1,3 +1,2 @@ - diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html new file mode 100644 index 00000000000..c1fa1bf97bc --- /dev/null +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/b.html @@ -0,0 +1,2 @@ + + diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js new file mode 100644 index 00000000000..2c935611eab --- /dev/null +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/c.js @@ -0,0 +1 @@ +call("c"); diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json new file mode 100644 index 00000000000..c5f216e03fd --- /dev/null +++ b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/package.json @@ -0,0 +1,5 @@ +{ + "@parcel/bundler-default": { + "minBundleSize": 0 + } +} diff --git a/packages/core/integration-tests/test/integration/cache-add-dep-referenced/yarn.lock b/packages/core/integration-tests/test/integration/cache-add-dep-referenced/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d