Skip to content

Commit c78601b

Browse files
author
Will Binns-Smith
authoredOct 12, 2021
shouldVisitChild: Check parent and child node previously deferred separately (#7043)
1 parent 2c83842 commit c78601b

File tree

10 files changed

+80
-8
lines changed

10 files changed

+80
-8
lines changed
 

‎packages/core/core/src/AssetGraph.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -301,17 +301,21 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
301301
) {
302302
return true;
303303
}
304-
305-
let {sideEffects, canDefer = true} = childNode.value;
306-
let dependency = node.value;
307-
let previouslyDeferred = node.hasDeferred;
304+
// Node types are proved above
305+
let dependencyNode = node;
306+
let assetGroupNode = childNode;
307+
308+
let {sideEffects, canDefer = true} = assetGroupNode.value;
309+
let dependency = dependencyNode.value;
310+
let dependencyPreviouslyDeferred = dependencyNode.hasDeferred;
311+
let assetGroupPreviouslyDeferred = assetGroupNode.deferred;
308312
let defer = this.shouldDeferDependency(dependency, sideEffects, canDefer);
309-
node.hasDeferred = defer;
310-
childNode.deferred = defer;
313+
dependencyNode.hasDeferred = defer;
314+
assetGroupNode.deferred = defer;
311315

312-
if (!previouslyDeferred && defer) {
316+
if (!dependencyPreviouslyDeferred && defer) {
313317
this.markParentsWithHasDeferred(nodeId);
314-
} else if (previouslyDeferred && !defer) {
318+
} else if (assetGroupPreviouslyDeferred && !defer) {
315319
this.unmarkParentsWithHasDeferred(childNodeId);
316320
}
317321

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { barer } from './package';
2+
3+
output = barer;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { barer, foo } from './package';
2+
3+
output = `${barer} ${foo}`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { barer, foo, bar } from './package';
2+
3+
output = `${barer} ${foo} ${bar}`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const bar = 'bar';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export {bar as barer} from "./bar";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const foo = 'foo';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export {foo} from './foo';
2+
export {bar} from './bar';
3+
export {barer} from './barer';
4+
5+
sideEffectNoop(module);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"sideEffects": ["index.js"]
3+
}

‎packages/core/integration-tests/test/scope-hoisting.js

+48
Original file line numberDiff line numberDiff line change
@@ -6034,4 +6034,52 @@ describe('scope hoisting', function() {
60346034
shouldDisableCache: false,
60356035
});
60366036
});
6037+
6038+
it('unmark an asset group as deferred when it becomes used', async function() {
6039+
let testDir = path.join(
6040+
__dirname,
6041+
'integration/scope-hoisting/es6/unmarks-defer-for-assetgroup',
6042+
);
6043+
6044+
await overlayFS.mkdirp(testDir);
6045+
await overlayFS.copyFile(
6046+
path.join(testDir, 'index1.js'),
6047+
path.join(testDir, 'index.js'),
6048+
);
6049+
6050+
let b = await bundle(path.join(testDir, 'index.js'), {
6051+
inputFS: overlayFS,
6052+
outputFS: overlayFS,
6053+
shouldDisableCache: true,
6054+
});
6055+
6056+
await run(b);
6057+
6058+
await overlayFS.copyFile(
6059+
path.join(testDir, 'index2.js'),
6060+
path.join(testDir, 'index.js'),
6061+
);
6062+
6063+
b = await bundle(path.join(testDir, 'index.js'), {
6064+
inputFS: overlayFS,
6065+
outputFS: overlayFS,
6066+
shouldDisableCache: false,
6067+
});
6068+
6069+
await run(b);
6070+
6071+
await overlayFS.copyFile(
6072+
path.join(testDir, 'index3.js'),
6073+
path.join(testDir, 'index.js'),
6074+
);
6075+
6076+
b = await bundle(path.join(testDir, 'index.js'), {
6077+
inputFS: overlayFS,
6078+
outputFS: overlayFS,
6079+
shouldDisableCache: false,
6080+
});
6081+
6082+
let output = await run(b);
6083+
assert.strictEqual(output, 'bar foo bar');
6084+
});
60376085
});

0 commit comments

Comments
 (0)
Please sign in to comment.