From 9f3e5a325abfdee5f396e24fd00d2b9273a000a7 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 | 40 +++++++++++-------- .../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(+), 67 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..25fe7960306 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -528,30 +528,36 @@ export default class Chunk { 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); + let renderedLength; + if (module.isIncluded()) { + const source = module.render(renderOptions); + source.trim(); + if (options.compact && source.lastLine().indexOf('//') !== -1) source.append('\n'); + this.renderedModuleSources.push(source); + + const namespace = module.getOrCreateNamespace(); + if (namespace.included) { + 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)); + } + } + renderedLength = source.length(); + } else { + renderedLength = 0; + } 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); 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