From 43d3f3d19f26223c76e9863535285d55c4edb991 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 14 Jun 2019 14:54:09 +0200 Subject: [PATCH] Completely omit files that do not have any included statements --- src/Chunk.ts | 52 ++++++++----------- .../remove-treeshaken-banners/_config.js | 3 ++ .../remove-treeshaken-banners/_expected.js | 4 ++ .../remove-treeshaken-banners/dep-included.js | 6 +++ .../remove-treeshaken-banners/dep-removed.js | 5 ++ .../samples/remove-treeshaken-banners/main.js | 6 +++ .../_expected/amd.js | 8 --- .../_expected/cjs.js | 8 --- .../_expected/es.js | 8 --- .../_expected/iife.js | 8 --- .../_expected/system.js | 8 --- .../_expected/umd.js | 8 --- test/misc/bundle-information.js | 4 +- 13 files changed, 49 insertions(+), 79 deletions(-) create mode 100644 test/form/samples/remove-treeshaken-banners/_config.js create mode 100644 test/form/samples/remove-treeshaken-banners/_expected.js create mode 100644 test/form/samples/remove-treeshaken-banners/dep-included.js create mode 100644 test/form/samples/remove-treeshaken-banners/dep-removed.js create mode 100644 test/form/samples/remove-treeshaken-banners/main.js diff --git a/src/Chunk.ts b/src/Chunk.ts index 70ca4c4d850..8297480dd42 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -152,7 +152,7 @@ export default class Chunk { exports: ChunkExports; } = undefined as any; private renderedHash: string = undefined as any; - private renderedModuleSources: MagicString[] = undefined as any; + private renderedModuleSources = new Map(); private renderedSource: MagicStringBundle | null = null; private renderedSourceLength: number = undefined as any; private sortedExportNames: string[] | null = null; @@ -522,36 +522,34 @@ export default class Chunk { this.prepareDynamicImports(); let hoistedSource = ''; - const renderedModules = (this.renderedModules = Object.create(null)); - this.renderedModuleSources = []; - - for (let i = 0; i < this.orderedModules.length; i++) { - const module = this.orderedModules[i]; - const source = module.render(renderOptions); - source.trim(); - if (options.compact && source.lastLine().indexOf('//') !== -1) source.append('\n'); - this.renderedModuleSources.push(source); + for (const module of this.orderedModules) { + let renderedLength = 0; + if (module.isIncluded()) { + const source = module.render(renderOptions).trim(); + if (options.compact && source.lastLine().indexOf('//') !== -1) source.append('\n'); + const namespace = module.getOrCreateNamespace(); + if (namespace.included || source.length() > 0) { + renderedLength = source.length(); + this.renderedModuleSources.set(module, source); + magicString.addSource(source); + this.usedModules.push(module); + + if (namespace.included && !this.graph.preserveModules) { + const rendered = namespace.renderBlock(renderOptions); + if (namespace.renderFirst()) hoistedSource += n + rendered; + else magicString.addSource(new MagicString(rendered)); + } + } + } const { renderedExports, removedExports } = module.getRenderedExports(); renderedModules[module.id] = { originalLength: module.originalCode.length, removedExports, renderedExports, - renderedLength: source.length() + renderedLength }; - - const namespace = module.getOrCreateNamespace(); - if (namespace.included || !source.isEmpty()) { - magicString.addSource(source); - this.usedModules.push(module); - - if (namespace.included && !this.graph.preserveModules) { - const rendered = namespace.renderBlock(renderOptions); - if (namespace.renderFirst()) hoistedSource += n + rendered; - else magicString.addSource(new MagicString(rendered)); - } - } } if (hoistedSource) magicString.prepend(hoistedSource + n + n); @@ -813,9 +811,7 @@ export default class Chunk { } private finaliseDynamicImports(format: string) { - for (let i = 0; i < this.orderedModules.length; i++) { - const module = this.orderedModules[i]; - const code = this.renderedModuleSources[i]; + for (const [module, code] of this.renderedModuleSources) { for (const { node, resolution } of module.dynamicImports) { if (!resolution) continue; if (resolution instanceof Module) { @@ -840,9 +836,7 @@ export default class Chunk { } private finaliseImportMetas(format: string): void { - for (let i = 0; i < this.orderedModules.length; i++) { - const module = this.orderedModules[i]; - const code = this.renderedModuleSources[i]; + for (const [module, code] of this.renderedModuleSources) { for (const importMeta of module.importMetas) { importMeta.renderFinalMechanism(code, this.id, format, this.graph.pluginDriver); } diff --git a/test/form/samples/remove-treeshaken-banners/_config.js b/test/form/samples/remove-treeshaken-banners/_config.js new file mode 100644 index 00000000000..4010568ad64 --- /dev/null +++ b/test/form/samples/remove-treeshaken-banners/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'Also remove banner comments when completely tree-shaking files' +}; diff --git a/test/form/samples/remove-treeshaken-banners/_expected.js b/test/form/samples/remove-treeshaken-banners/_expected.js new file mode 100644 index 00000000000..054d5981ded --- /dev/null +++ b/test/form/samples/remove-treeshaken-banners/_expected.js @@ -0,0 +1,4 @@ +// dep included banner: included +console.log('dep included'); + +// dep included footer: included diff --git a/test/form/samples/remove-treeshaken-banners/dep-included.js b/test/form/samples/remove-treeshaken-banners/dep-included.js new file mode 100644 index 00000000000..b372725f04f --- /dev/null +++ b/test/form/samples/remove-treeshaken-banners/dep-included.js @@ -0,0 +1,6 @@ +// dep included banner: included + +const removed = 1; +console.log('dep included'); + +// dep included footer: included diff --git a/test/form/samples/remove-treeshaken-banners/dep-removed.js b/test/form/samples/remove-treeshaken-banners/dep-removed.js new file mode 100644 index 00000000000..6c1743adf97 --- /dev/null +++ b/test/form/samples/remove-treeshaken-banners/dep-removed.js @@ -0,0 +1,5 @@ +// dep removed banner: removed + +const removed = 1; + +// dep removed footer: removed diff --git a/test/form/samples/remove-treeshaken-banners/main.js b/test/form/samples/remove-treeshaken-banners/main.js new file mode 100644 index 00000000000..4f2f5223dc8 --- /dev/null +++ b/test/form/samples/remove-treeshaken-banners/main.js @@ -0,0 +1,6 @@ +// main banner: removed + +import './dep-removed'; +import './dep-included'; + +// main footer: removed diff --git a/test/form/samples/tree-shake-default-exports/_expected/amd.js b/test/form/samples/tree-shake-default-exports/_expected/amd.js index f4cdec00df3..fa3e3c3a440 100644 --- a/test/form/samples/tree-shake-default-exports/_expected/amd.js +++ b/test/form/samples/tree-shake-default-exports/_expected/amd.js @@ -1,13 +1,5 @@ define(function () { 'use strict'; - /* header 1 */ - - /* footer 1 */ - - /* header 2 */ - - /* footer 2 */ - /* header 3 */ /* leading retained */ diff --git a/test/form/samples/tree-shake-default-exports/_expected/cjs.js b/test/form/samples/tree-shake-default-exports/_expected/cjs.js index dd663acba8d..dce4a798ecc 100644 --- a/test/form/samples/tree-shake-default-exports/_expected/cjs.js +++ b/test/form/samples/tree-shake-default-exports/_expected/cjs.js @@ -1,13 +1,5 @@ 'use strict'; -/* header 1 */ - -/* footer 1 */ - -/* header 2 */ - -/* footer 2 */ - /* header 3 */ /* leading retained */ diff --git a/test/form/samples/tree-shake-default-exports/_expected/es.js b/test/form/samples/tree-shake-default-exports/_expected/es.js index ea5ffcb4f83..1353b460204 100644 --- a/test/form/samples/tree-shake-default-exports/_expected/es.js +++ b/test/form/samples/tree-shake-default-exports/_expected/es.js @@ -1,11 +1,3 @@ -/* header 1 */ - -/* footer 1 */ - -/* header 2 */ - -/* footer 2 */ - /* header 3 */ /* leading retained */ diff --git a/test/form/samples/tree-shake-default-exports/_expected/iife.js b/test/form/samples/tree-shake-default-exports/_expected/iife.js index 9f51f3ddc3e..6be2f732727 100644 --- a/test/form/samples/tree-shake-default-exports/_expected/iife.js +++ b/test/form/samples/tree-shake-default-exports/_expected/iife.js @@ -1,14 +1,6 @@ (function () { 'use strict'; - /* header 1 */ - - /* footer 1 */ - - /* header 2 */ - - /* footer 2 */ - /* header 3 */ /* leading retained */ diff --git a/test/form/samples/tree-shake-default-exports/_expected/system.js b/test/form/samples/tree-shake-default-exports/_expected/system.js index adcccabc0b3..e6e9a00d418 100644 --- a/test/form/samples/tree-shake-default-exports/_expected/system.js +++ b/test/form/samples/tree-shake-default-exports/_expected/system.js @@ -3,14 +3,6 @@ System.register([], function () { return { execute: function () { - /* header 1 */ - - /* footer 1 */ - - /* header 2 */ - - /* footer 2 */ - /* header 3 */ /* leading retained */ diff --git a/test/form/samples/tree-shake-default-exports/_expected/umd.js b/test/form/samples/tree-shake-default-exports/_expected/umd.js index 6a85fe815cb..04aafc5c981 100644 --- a/test/form/samples/tree-shake-default-exports/_expected/umd.js +++ b/test/form/samples/tree-shake-default-exports/_expected/umd.js @@ -3,14 +3,6 @@ factory(); }(function () { 'use strict'; - /* header 1 */ - - /* footer 1 */ - - /* header 2 */ - - /* footer 2 */ - /* header 3 */ /* leading retained */ diff --git a/test/misc/bundle-information.js b/test/misc/bundle-information.js index e37fd14bc66..4351b7aa247 100644 --- a/test/misc/bundle-information.js +++ b/test/misc/bundle-information.js @@ -423,7 +423,7 @@ console.log(other);Promise.all([import('./dynamic1'), import('./dynamic2')]).the input: ['input'], plugins: [ loader({ - input: 'export { renderedFn, renderedClass, renderedConst } from "code"', + input: '/* removed header */ export { renderedFn, renderedClass, renderedConst } from "code"', code: 'export function renderedFn() {}\nexport function removedFn() {}\n' + 'export class renderedClass {}\nexport class removedClass {}\n' + @@ -457,7 +457,7 @@ console.log(other);Promise.all([import('./dynamic1'), import('./dynamic2')]).the renderedLength: 72 }, input: { - originalLength: 63, + originalLength: 84, removedExports: [], renderedExports: [], renderedLength: 0