mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-22 06:41:45 +08:00
Before: ``` $ ng build --no-progress Hash: ff03df269349b817eef4 Time: 11202ms chunk {0} 0.chunk.js, 0.chunk.js.map 1.61 kB {1} {3} [rendered] chunk {1} 1.chunk.js, 1.chunk.js.map 1.46 kB {0} {3} [rendered] chunk {2} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {6} [initial] [rendered] chunk {3} main.bundle.js, main.bundle.js.map (main) 6.38 kB {5} [initial] [rendered] chunk {4} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {6} [initial] [rendered] chunk {5} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.16 MB [initial] [rendered] chunk {6} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered] ``` After: ``` $ ng build --no-progress Hash: 2bc12a89f40f3b4818b5 Time: 9613ms chunk {feature.module} feature.module.chunk.js, feature.module.chunk.js.map 1.46 kB {lazy.module} {main} [rendered] chunk {inline} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered] chunk {lazy.module} lazy.module.chunk.js, lazy.module.chunk.js.map 1.61 kB {feature.module} {main} [rendered] chunk {main} main.bundle.js, main.bundle.js.map (main) 6.38 kB {vendor} [initial] [rendered] chunk {polyfills} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {inline} [initial] [rendered] chunk {styles} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {inline} [initial] [rendered] chunk {vendor} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.16 MB [initial] [rendered] ``` Fix #6700
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import * as webpack from 'webpack';
|
|
|
|
|
|
// This just extends webpack.NamedChunksPlugin to prevent name collisions.
|
|
export class NamedLazyChunksWebpackPlugin extends webpack.NamedChunksPlugin {
|
|
constructor() {
|
|
// Append a dot and number if the name already exists.
|
|
const nameMap = new Map<string, boolean>();
|
|
function getUniqueName(baseName: string) {
|
|
let name = baseName;
|
|
let num = 0;
|
|
while (nameMap.has(name)) {
|
|
name = `${baseName}.${num++}`;
|
|
}
|
|
nameMap.set(name, true);
|
|
return name;
|
|
}
|
|
|
|
const nameResolver = (chunk: any) => {
|
|
// Entry chunks have a name already, use it.
|
|
if (chunk.name) {
|
|
return chunk.name;
|
|
}
|
|
|
|
// Try to figure out if it's a lazy loaded route.
|
|
if (chunk.blocks
|
|
&& chunk.blocks.length > 0
|
|
&& chunk.blocks[0].dependencies
|
|
&& chunk.blocks[0].dependencies.length > 0
|
|
&& chunk.blocks[0].dependencies[0].lazyRouteChunkName
|
|
) {
|
|
// lazyRouteChunkName was added by @ngtools/webpack.
|
|
return getUniqueName(chunk.blocks[0].dependencies[0].lazyRouteChunkName);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
super(nameResolver);
|
|
}
|
|
}
|