Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Completely omit files that do not have any included statements #2940

Merged
merged 1 commit into from Jun 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 23 additions & 29 deletions src/Chunk.ts
Expand Up @@ -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<Module, MagicString>();
private renderedSource: MagicStringBundle | null = null;
private renderedSourceLength: number = undefined as any;
private sortedExportNames: string[] | null = null;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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) {
Expand All @@ -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);
}
Expand Down
3 changes: 3 additions & 0 deletions test/form/samples/remove-treeshaken-banners/_config.js
@@ -0,0 +1,3 @@
module.exports = {
description: 'Also remove banner comments when completely tree-shaking files'
};
4 changes: 4 additions & 0 deletions test/form/samples/remove-treeshaken-banners/_expected.js
@@ -0,0 +1,4 @@
// dep included banner: included
console.log('dep included');

// dep included footer: included
6 changes: 6 additions & 0 deletions 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
5 changes: 5 additions & 0 deletions test/form/samples/remove-treeshaken-banners/dep-removed.js
@@ -0,0 +1,5 @@
// dep removed banner: removed

const removed = 1;

// dep removed footer: removed
6 changes: 6 additions & 0 deletions test/form/samples/remove-treeshaken-banners/main.js
@@ -0,0 +1,6 @@
// main banner: removed

import './dep-removed';
import './dep-included';

// main footer: removed
8 changes: 0 additions & 8 deletions 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 */
Expand Down
8 changes: 0 additions & 8 deletions 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 */
Expand Down
8 changes: 0 additions & 8 deletions 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 */
Expand Down
@@ -1,14 +1,6 @@
(function () {
'use strict';

/* header 1 */

/* footer 1 */

/* header 2 */

/* footer 2 */

/* header 3 */

/* leading retained */
Expand Down
Expand Up @@ -3,14 +3,6 @@ System.register([], function () {
return {
execute: function () {

/* header 1 */

/* footer 1 */

/* header 2 */

/* footer 2 */

/* header 3 */

/* leading retained */
Expand Down
8 changes: 0 additions & 8 deletions test/form/samples/tree-shake-default-exports/_expected/umd.js
Expand Up @@ -3,14 +3,6 @@
factory();
}(function () { 'use strict';

/* header 1 */

/* footer 1 */

/* header 2 */

/* footer 2 */

/* header 3 */

/* leading retained */
Expand Down
4 changes: 2 additions & 2 deletions test/misc/bundle-information.js
Expand Up @@ -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' +
Expand Down Expand Up @@ -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
Expand Down