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