1
1
import * as webpack from 'webpack' ;
2
2
import * as path from 'path' ;
3
3
import { GlobCopyWebpackPlugin } from '../plugins/glob-copy-webpack-plugin' ;
4
+ import { packageChunkSort } from '../utilities/package-chunk-sort' ;
4
5
import { BaseHrefWebpackPlugin } from '@angular-cli/base-href-webpack' ;
5
6
6
7
const HtmlWebpackPlugin = require ( 'html-webpack-plugin' ) ;
@@ -12,7 +13,8 @@ export function getWebpackCommonConfig(
12
13
environment : string ,
13
14
appConfig : any ,
14
15
baseHref : string ,
15
- sourcemap : boolean
16
+ sourcemap : boolean ,
17
+ vendorChunk : boolean
16
18
) {
17
19
18
20
const appRoot = path . resolve ( projectRoot , appConfig . root ) ;
@@ -23,6 +25,7 @@ export function getWebpackCommonConfig(
23
25
const scripts = appConfig . scripts
24
26
? appConfig . scripts . map ( ( script : string ) => path . resolve ( appRoot , script ) )
25
27
: [ ] ;
28
+ const extraPlugins : any [ ] = [ ] ;
26
29
27
30
let entry : { [ key : string ] : string [ ] } = {
28
31
main : [ appMain ]
@@ -32,6 +35,14 @@ export function getWebpackCommonConfig(
32
35
if ( appConfig . styles . length > 0 ) { entry [ 'styles' ] = styles ; }
33
36
if ( appConfig . scripts . length > 0 ) { entry [ 'scripts' ] = scripts ; }
34
37
38
+ if ( vendorChunk ) {
39
+ extraPlugins . push ( new webpack . optimize . CommonsChunkPlugin ( {
40
+ name : 'vendor' ,
41
+ chunks : [ 'main' ] ,
42
+ minChunks : ( module : any ) => module . userRequest && ! module . userRequest . includes ( appRoot )
43
+ } ) ) ;
44
+ }
45
+
35
46
return {
36
47
devtool : sourcemap ? 'source-map' : 'eval' ,
37
48
resolve : {
@@ -91,7 +102,7 @@ export function getWebpackCommonConfig(
91
102
new HtmlWebpackPlugin ( {
92
103
template : path . resolve ( appRoot , appConfig . index ) ,
93
104
filename : path . resolve ( appConfig . outDir , appConfig . index ) ,
94
- chunksSortMode : 'dependency'
105
+ chunksSortMode : packageChunkSort ( [ 'inline' , 'styles' , 'scripts' , 'vendor' , 'main' ] )
95
106
} ) ,
96
107
new BaseHrefWebpackPlugin ( {
97
108
baseHref : baseHref
@@ -104,10 +115,6 @@ export function getWebpackCommonConfig(
104
115
. replace ( / [ \- \[ \] \/ \{ \} \( \) \* \+ \? \. \\ \^ \$ \| ] / g, '\\$&' ) ) ,
105
116
path . resolve ( appRoot , appConfig . environments [ environment ] )
106
117
) ,
107
- new webpack . optimize . CommonsChunkPlugin ( {
108
- // Optimizing ensures loading order in index.html
109
- name : [ 'styles' , 'scripts' , 'main' ] . reverse ( )
110
- } ) ,
111
118
new webpack . optimize . CommonsChunkPlugin ( {
112
119
minChunks : Infinity ,
113
120
name : 'inline'
@@ -121,8 +128,8 @@ export function getWebpackCommonConfig(
121
128
options : {
122
129
postcss : [ autoprefixer ( ) ]
123
130
} ,
124
- } ) ,
125
- ] ,
131
+ } )
132
+ ] . concat ( extraPlugins ) ,
126
133
node : {
127
134
fs : 'empty' ,
128
135
global : true ,
0 commit comments