From 6be355448b8757d93bee21366b2548a59033e617 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 23 Mar 2023 20:49:25 +0100 Subject: [PATCH] Handle manual chunks where the entry is not part of the module graph --- src/ast/nodes/Program.ts | 3 +++ .../samples/manual-chunk-not-included/_config.js | 11 +++++++++++ .../_expected/amd/generated-manual.js | 5 +++++ .../manual-chunk-not-included/_expected/amd/main.js | 5 +++++ .../_expected/cjs/generated-manual.js | 3 +++ .../manual-chunk-not-included/_expected/cjs/main.js | 5 +++++ .../_expected/es/generated-manual.js | 1 + .../manual-chunk-not-included/_expected/es/main.js | 3 +++ .../_expected/system/generated-manual.js | 10 ++++++++++ .../_expected/system/main.js | 11 +++++++++++ .../samples/manual-chunk-not-included/main.js | 2 ++ .../samples/manual-chunk-not-included/manual-entry.js | 5 +++++ .../manual-chunk-not-included/manual-included.js | 1 + 13 files changed, 65 insertions(+) create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_config.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/amd/generated-manual.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/amd/main.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/generated-manual.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/es/generated-manual.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/es/main.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/system/generated-manual.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/_expected/system/main.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/main.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/manual-entry.js create mode 100644 test/chunking-form/samples/manual-chunk-not-included/manual-included.js diff --git a/src/ast/nodes/Program.ts b/src/ast/nodes/Program.ts index 9a23794c60c..e82cc2bf2b6 100644 --- a/src/ast/nodes/Program.ts +++ b/src/ast/nodes/Program.ts @@ -18,6 +18,9 @@ export default class Program extends NodeBase { private hasLoggedEffect = false; hasCachedEffects(): boolean { + if (!this.included) { + return false; + } return this.hasCachedEffect === null ? (this.hasCachedEffect = this.hasEffects(createHasEffectsContext())) : this.hasCachedEffect; diff --git a/test/chunking-form/samples/manual-chunk-not-included/_config.js b/test/chunking-form/samples/manual-chunk-not-included/_config.js new file mode 100644 index 00000000000..4ad3e9f1e3a --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'handles manual chunks where the root is not part of the module graph', + options: { + input: ['main.js'], + output: { + manualChunks: { + manual: ['manual-entry.js'] + } + } + } +}; diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/amd/generated-manual.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/amd/generated-manual.js new file mode 100644 index 00000000000..f9e8bf57b21 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/amd/generated-manual.js @@ -0,0 +1,5 @@ +define((function () { 'use strict'; + + console.log('included'); + +})); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/amd/main.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/amd/main.js new file mode 100644 index 00000000000..b9a9d643047 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['./generated-manual'], (function (manual) { 'use strict'; + + console.log('main'); + +})); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/generated-manual.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/generated-manual.js new file mode 100644 index 00000000000..46970f369e4 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/generated-manual.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('included'); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/main.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/main.js new file mode 100644 index 00000000000..f679e51bff2 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/cjs/main.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./generated-manual.js'); + +console.log('main'); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/es/generated-manual.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/es/generated-manual.js new file mode 100644 index 00000000000..452029d8355 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/es/generated-manual.js @@ -0,0 +1 @@ +console.log('included'); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/es/main.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/es/main.js new file mode 100644 index 00000000000..ddeb648f149 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/es/main.js @@ -0,0 +1,3 @@ +import './generated-manual.js'; + +console.log('main'); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/system/generated-manual.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/system/generated-manual.js new file mode 100644 index 00000000000..f147b38fa45 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/system/generated-manual.js @@ -0,0 +1,10 @@ +System.register([], (function () { + 'use strict'; + return { + execute: (function () { + + console.log('included'); + + }) + }; +})); diff --git a/test/chunking-form/samples/manual-chunk-not-included/_expected/system/main.js b/test/chunking-form/samples/manual-chunk-not-included/_expected/system/main.js new file mode 100644 index 00000000000..3e762e61fd8 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/_expected/system/main.js @@ -0,0 +1,11 @@ +System.register(['./generated-manual.js'], (function () { + 'use strict'; + return { + setters: [null], + execute: (function () { + + console.log('main'); + + }) + }; +})); diff --git a/test/chunking-form/samples/manual-chunk-not-included/main.js b/test/chunking-form/samples/manual-chunk-not-included/main.js new file mode 100644 index 00000000000..8e6e9e0b963 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/main.js @@ -0,0 +1,2 @@ +import './manual-included'; +console.log('main'); diff --git a/test/chunking-form/samples/manual-chunk-not-included/manual-entry.js b/test/chunking-form/samples/manual-chunk-not-included/manual-entry.js new file mode 100644 index 00000000000..9947c39b198 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/manual-entry.js @@ -0,0 +1,5 @@ +import './manual-included'; + +function test() {} + +test(); diff --git a/test/chunking-form/samples/manual-chunk-not-included/manual-included.js b/test/chunking-form/samples/manual-chunk-not-included/manual-included.js new file mode 100644 index 00000000000..452029d8355 --- /dev/null +++ b/test/chunking-form/samples/manual-chunk-not-included/manual-included.js @@ -0,0 +1 @@ +console.log('included');