Skip to content

Commit

Permalink
shouldVisitChild: Check parent and child node previously deferred sep…
Browse files Browse the repository at this point in the history
…arately (#7043)
  • Loading branch information
Will Binns-Smith committed Oct 12, 2021
1 parent 2c83842 commit c78601b
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 8 deletions.
20 changes: 12 additions & 8 deletions packages/core/core/src/AssetGraph.js
Expand Up @@ -301,17 +301,21 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
) {
return true;
}

let {sideEffects, canDefer = true} = childNode.value;
let dependency = node.value;
let previouslyDeferred = node.hasDeferred;
// Node types are proved above
let dependencyNode = node;
let assetGroupNode = childNode;

let {sideEffects, canDefer = true} = assetGroupNode.value;
let dependency = dependencyNode.value;
let dependencyPreviouslyDeferred = dependencyNode.hasDeferred;
let assetGroupPreviouslyDeferred = assetGroupNode.deferred;
let defer = this.shouldDeferDependency(dependency, sideEffects, canDefer);
node.hasDeferred = defer;
childNode.deferred = defer;
dependencyNode.hasDeferred = defer;
assetGroupNode.deferred = defer;

if (!previouslyDeferred && defer) {
if (!dependencyPreviouslyDeferred && defer) {
this.markParentsWithHasDeferred(nodeId);
} else if (previouslyDeferred && !defer) {
} else if (assetGroupPreviouslyDeferred && !defer) {
this.unmarkParentsWithHasDeferred(childNodeId);
}

Expand Down
@@ -0,0 +1,3 @@
import { barer } from './package';

output = barer;
@@ -0,0 +1,3 @@
import { barer, foo } from './package';

output = `${barer} ${foo}`;
@@ -0,0 +1,3 @@
import { barer, foo, bar } from './package';

output = `${barer} ${foo} ${bar}`;
@@ -0,0 +1 @@
export const bar = 'bar';
@@ -0,0 +1 @@
export {bar as barer} from "./bar";
@@ -0,0 +1 @@
export const foo = 'foo';
@@ -0,0 +1,5 @@
export {foo} from './foo';
export {bar} from './bar';
export {barer} from './barer';

sideEffectNoop(module);
@@ -0,0 +1,3 @@
{
"sideEffects": ["index.js"]
}
48 changes: 48 additions & 0 deletions packages/core/integration-tests/test/scope-hoisting.js
Expand Up @@ -6034,4 +6034,52 @@ describe('scope hoisting', function() {
shouldDisableCache: false,
});
});

it('unmark an asset group as deferred when it becomes used', async function() {
let testDir = path.join(
__dirname,
'integration/scope-hoisting/es6/unmarks-defer-for-assetgroup',
);

await overlayFS.mkdirp(testDir);
await overlayFS.copyFile(
path.join(testDir, 'index1.js'),
path.join(testDir, 'index.js'),
);

let b = await bundle(path.join(testDir, 'index.js'), {
inputFS: overlayFS,
outputFS: overlayFS,
shouldDisableCache: true,
});

await run(b);

await overlayFS.copyFile(
path.join(testDir, 'index2.js'),
path.join(testDir, 'index.js'),
);

b = await bundle(path.join(testDir, 'index.js'), {
inputFS: overlayFS,
outputFS: overlayFS,
shouldDisableCache: false,
});

await run(b);

await overlayFS.copyFile(
path.join(testDir, 'index3.js'),
path.join(testDir, 'index.js'),
);

b = await bundle(path.join(testDir, 'index.js'), {
inputFS: overlayFS,
outputFS: overlayFS,
shouldDisableCache: false,
});

let output = await run(b);
assert.strictEqual(output, 'bar foo bar');
});
});

0 comments on commit c78601b

Please sign in to comment.