diff --git a/src/Chunk.ts b/src/Chunk.ts index 5e0a768a029..e52dcad8642 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -338,6 +338,7 @@ export default class Chunk { const dynamicDependencies: Set = new Set(); for (const module of this.orderedModules) { this.addChunksFromDependencies(module.dependencies, dependencies); + this.addChunksFromDependencies(module.getReexportModules(), dependencies); this.addChunksFromDependencies(module.dynamicDependencies, dynamicDependencies); this.setUpModuleImports(module); } diff --git a/src/Module.ts b/src/Module.ts index afd720b00dc..df0d6a0f880 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -311,6 +311,10 @@ export default class Module { ); } + getReexportModules() { + return this.getReexports().map(exportName => this.getVariableForExportName(exportName).module); + } + getReexports(walkedModuleIds = new Set()) { // avoid infinite recursion when using circular `export * from X` if (walkedModuleIds.has(this.id)) { diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_config.js b/test/chunking-form/samples/preserve-modules-nested-export/_config.js new file mode 100644 index 00000000000..888c45ee79d --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'confirm exports are preserved when exporting a module', + options: { + input: ['main1.js', 'main2.js'], + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/dep.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/dep.js new file mode 100644 index 00000000000..226b31a03e4 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/dep.js @@ -0,0 +1,7 @@ +define(['exports'], function (exports) { 'use strict'; + + const foo = 1; + + exports.foo = foo; + +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/main1.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/main1.js new file mode 100644 index 00000000000..f6df6912f6b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/main1.js @@ -0,0 +1,9 @@ +define(['exports', './dep'], function (exports, __chunk_1) { 'use strict'; + + + + exports.foo = __chunk_1.foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/main2.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/main2.js new file mode 100644 index 00000000000..f6df6912f6b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/amd/main2.js @@ -0,0 +1,9 @@ +define(['exports', './dep'], function (exports, __chunk_1) { 'use strict'; + + + + exports.foo = __chunk_1.foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/dep.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/dep.js new file mode 100644 index 00000000000..5ea7cf19376 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/dep.js @@ -0,0 +1,5 @@ +'use strict'; + +const foo = 1; + +exports.foo = foo; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/main1.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/main1.js new file mode 100644 index 00000000000..d76e26a40a8 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/main1.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var __chunk_1 = require('./dep.js'); + + + +exports.foo = __chunk_1.foo; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/main2.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/main2.js new file mode 100644 index 00000000000..d76e26a40a8 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/cjs/main2.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var __chunk_1 = require('./dep.js'); + + + +exports.foo = __chunk_1.foo; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/dep.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/dep.js new file mode 100644 index 00000000000..a106a6bfc30 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/dep.js @@ -0,0 +1,3 @@ +const foo = 1; + +export { foo }; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/main1.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/main1.js new file mode 100644 index 00000000000..d5eae06078e --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/main1.js @@ -0,0 +1 @@ +export { foo } from './dep.js'; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/main2.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/main2.js new file mode 100644 index 00000000000..d5eae06078e --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/es/main2.js @@ -0,0 +1 @@ +export { foo } from './dep.js'; diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/dep.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/dep.js new file mode 100644 index 00000000000..5de3e70c4fc --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/dep.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + const foo = exports('foo', 1); + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/main1.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/main1.js new file mode 100644 index 00000000000..6741f0abb9c --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/main1.js @@ -0,0 +1,13 @@ +System.register(['./dep.js'], function (exports, module) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/main2.js b/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/main2.js new file mode 100644 index 00000000000..6741f0abb9c --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/_expected/system/main2.js @@ -0,0 +1,13 @@ +System.register(['./dep.js'], function (exports, module) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-export/dep.js b/test/chunking-form/samples/preserve-modules-nested-export/dep.js new file mode 100644 index 00000000000..4ac60a12c1a --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/dep.js @@ -0,0 +1,3 @@ +const foo = 1; + +export { foo }; \ No newline at end of file diff --git a/test/chunking-form/samples/preserve-modules-nested-export/main1.js b/test/chunking-form/samples/preserve-modules-nested-export/main1.js new file mode 100644 index 00000000000..9aa8e6f1b1a --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/main1.js @@ -0,0 +1 @@ +export { foo } from './dep'; \ No newline at end of file diff --git a/test/chunking-form/samples/preserve-modules-nested-export/main2.js b/test/chunking-form/samples/preserve-modules-nested-export/main2.js new file mode 100644 index 00000000000..a050307883f --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-export/main2.js @@ -0,0 +1 @@ +export { foo } from './main1.js'; \ No newline at end of file