From 1db667917c24a3afa0e6e5565803f8558cbed418 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Tue, 7 Aug 2018 07:53:46 +0200 Subject: [PATCH] Fix #2353 - retain empty manual chunks (#2362) * fixes #2353 * minor refactoring --- src/Graph.ts | 11 ++++------- .../samples/manual-chunks-dynamic/_config.js | 10 ++++++++++ .../_expected/amd/dynamic-10698fc3.js | 5 +++++ .../manual-chunks-dynamic/_expected/amd/main.js | 5 +++++ .../_expected/cjs/dynamic-5ab72169.js | 2 ++ .../manual-chunks-dynamic/_expected/cjs/main.js | 3 +++ .../_expected/es/dynamic-12dc935a.js | 1 + .../manual-chunks-dynamic/_expected/es/main.js | 1 + .../_expected/system/dynamic-e8bd5876.js | 10 ++++++++++ .../manual-chunks-dynamic/_expected/system/main.js | 10 ++++++++++ .../samples/manual-chunks-dynamic/dynamic.js | 1 + .../samples/manual-chunks-dynamic/main.js | 1 + 12 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_config.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/dynamic-10698fc3.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/main.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/dynamic-5ab72169.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/es/dynamic-12dc935a.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/es/main.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/system/dynamic-e8bd5876.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/_expected/system/main.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/dynamic.js create mode 100644 test/chunking-form/samples/manual-chunks-dynamic/main.js diff --git a/src/Graph.ts b/src/Graph.ts index 976e54654b1..fedcaff6f2e 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -445,7 +445,7 @@ export default class Graph { // exposed as an unresolvable export * (to a graph external export *, // either as a namespace import reexported or top-level export *) // should be made to be its own entry point module before chunking - const chunkList: Chunk[] = []; + let chunkList: Chunk[] = []; if (!preserveModules) { const chunkModules: { [entryHashSum: string]: Module[] } = {}; for (const module of orderedModules) { @@ -482,12 +482,9 @@ export default class Graph { } // filter out empty dependencies - for (let i = 0; i < chunkList.length; i++) { - const chunk = chunkList[i]; - if (chunk.isEmpty && !chunk.entryModule) { - chunkList.splice(i--, 1); - } - } + chunkList = chunkList.filter( + chunk => !chunk.isEmpty || chunk.entryModule || chunk.isManualChunk + ); // then go over and ensure all entry chunks export their variables for (const chunk of chunkList) { diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_config.js b/test/chunking-form/samples/manual-chunks-dynamic/_config.js new file mode 100644 index 00000000000..e184cd24ef9 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_config.js @@ -0,0 +1,10 @@ +module.exports = { + description: 'manual chunks to an empty dynamic chunk', + _single: true, + options: { + input: ['main.js'], + manualChunks: { + 'dynamic': ['dynamic.js'] + } + } +}; diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/dynamic-10698fc3.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/dynamic-10698fc3.js new file mode 100644 index 00000000000..f9f8229aa40 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/dynamic-10698fc3.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + + +}); diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/main.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/main.js new file mode 100644 index 00000000000..4ebb7e1db8e --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/amd/main.js @@ -0,0 +1,5 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(["./dynamic-10698fc3.js"], resolve, reject) }); + +}); diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/dynamic-5ab72169.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/dynamic-5ab72169.js new file mode 100644 index 00000000000..eb109abbed0 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/dynamic-5ab72169.js @@ -0,0 +1,2 @@ +'use strict'; + diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/main.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/main.js new file mode 100644 index 00000000000..f3310639beb --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/cjs/main.js @@ -0,0 +1,3 @@ +'use strict'; + +Promise.resolve(require("./dynamic-5ab72169.js")); diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/es/dynamic-12dc935a.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/es/dynamic-12dc935a.js new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/es/dynamic-12dc935a.js @@ -0,0 +1 @@ + diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/es/main.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/es/main.js new file mode 100644 index 00000000000..0e83b245b59 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/es/main.js @@ -0,0 +1 @@ +import("./dynamic-12dc935a.js"); diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/system/dynamic-e8bd5876.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/system/dynamic-e8bd5876.js new file mode 100644 index 00000000000..3b9098cda90 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/system/dynamic-e8bd5876.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/manual-chunks-dynamic/_expected/system/main.js b/test/chunking-form/samples/manual-chunks-dynamic/_expected/system/main.js new file mode 100644 index 00000000000..48d04548cf8 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/_expected/system/main.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import("./dynamic-e8bd5876.js"); + + } + }; +}); diff --git a/test/chunking-form/samples/manual-chunks-dynamic/dynamic.js b/test/chunking-form/samples/manual-chunks-dynamic/dynamic.js new file mode 100644 index 00000000000..38cb5406d06 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/dynamic.js @@ -0,0 +1 @@ +export const DYNAMIC_USED_BY_A = 'DYNAMIC_USED_BY_A'; \ No newline at end of file diff --git a/test/chunking-form/samples/manual-chunks-dynamic/main.js b/test/chunking-form/samples/manual-chunks-dynamic/main.js new file mode 100644 index 00000000000..a3d5cb1d641 --- /dev/null +++ b/test/chunking-form/samples/manual-chunks-dynamic/main.js @@ -0,0 +1 @@ +import('./dynamic.js'); \ No newline at end of file