@@ -5,23 +5,53 @@ import * as webpack from 'webpack';
5
5
import { ForkCheckerPlugin } from 'awesome-typescript-loader' ;
6
6
import { CliConfig } from './config' ;
7
7
8
- export function getWebpackCommonConfig ( projectRoot : string , sourceDir : string ) {
8
+ export function getWebpackCommonConfig ( projectRoot : string , environment : string , appConfig : any ) {
9
+
10
+ const appRoot = path . resolve ( projectRoot , appConfig . root ) ;
11
+ const appMain = path . resolve ( appRoot , appConfig . main ) ;
12
+
13
+ const bundledWithMain = appConfig . additionalEntries
14
+ . filter ( entry => typeof entry === "string" )
15
+ . map ( filename => path . resolve ( appRoot , filename ) ) ;
16
+
17
+ const separateBundles = appConfig . additionalEntries . filter ( entry => typeof entry === "object" ) ;
18
+ const entries = Object . assign (
19
+ { main : [ appMain , ...bundledWithMain ] } ,
20
+ separateBundles . reduce ( ( obj , entry ) =>
21
+ Object . assign ( obj , { [ entry . output ] : path . resolve ( appRoot , entry . input ) } ) ,
22
+ { } )
23
+ ) ;
24
+
25
+ const additionalFiles = separateBundles
26
+ . map ( entry => path . resolve ( appRoot , entry . input ) )
27
+ . concat ( bundledWithMain ) ;
28
+
9
29
return {
10
30
devtool : 'source-map' ,
11
31
resolve : {
12
32
extensions : [ '' , '.ts' , '.js' ] ,
13
- root : path . resolve ( projectRoot , `./ ${ sourceDir } ` )
33
+ root : appRoot
14
34
} ,
15
35
context : path . resolve ( __dirname , './' ) ,
16
- entry : {
17
- main : [ path . resolve ( projectRoot , `./${ sourceDir } /main.ts` ) ] ,
18
- polyfills : path . resolve ( projectRoot , `./${ sourceDir } /polyfills.ts` )
19
- } ,
36
+ entry : entries ,
20
37
output : {
21
- path : path . resolve ( projectRoot , './dist' ) ,
38
+ path : path . resolve ( projectRoot , appConfig . outDir ) ,
22
39
filename : '[name].bundle.js'
23
40
} ,
24
41
module : {
42
+ < << << << 504 a497963252326cf9f2cbccb93e9eb8aab6dfa
43
+ === === =
44
+ preLoaders : [
45
+ {
46
+ test : / \. j s $ / ,
47
+ loader : 'source-map-loader' ,
48
+ exclude : [
49
+ path . resolve ( appRoot , 'node_modules/rxjs' ) ,
50
+ path . resolve ( appRoot , 'node_modules/@angular' ) ,
51
+ ]
52
+ }
53
+ ] ,
54
+ > >>> >>> feat ( build ) : update angular - cli . json
25
55
loaders : [
26
56
{
27
57
test : / \.ts$ / ,
@@ -30,7 +60,7 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
30
60
loader : 'awesome-typescript-loader' ,
31
61
query : {
32
62
useForkChecker : true ,
33
- tsconfig : path . resolve ( projectRoot , `./ ${ sourceDir } / tsconfig.json` )
63
+ tsconfig : path . resolve ( appRoot , appConfig . tsconfig )
34
64
}
35
65
} ,
36
66
{
@@ -39,23 +69,47 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
39
69
] ,
40
70
exclude : [ / \.( spec | e2e ) \.ts$ / ]
41
71
} ,
42
- { test : / \. j s o n $ / , loader : 'json-loader' } ,
43
- { test : / \. c s s $ / , loaders : [ 'raw-loader' , 'postcss-loader' ] } ,
44
- { test : / \. s t y l $ / , loaders : [ 'raw-loader' , 'postcss-loader' , 'stylus-loader' ] } ,
45
- { test : / \. l e s s $ / , loaders : [ 'raw-loader' , 'postcss-loader' , 'less-loader' ] } ,
46
- { test : / \. s c s s $ | \. s a s s $ / , loaders : [ 'raw-loader' , 'postcss-loader' , 'sass-loader' ] } ,
47
- { test : / \. ( j p g | p n g ) $ / , loader : 'url-loader?limit=128000' } ,
48
- { test : / \. h t m l $ / , loader : 'raw-loader' }
72
+
73
+ // in main, load css as raw text
74
+ { exclude : additionalFiles , test : / \.css$ / , loaders : [ 'raw-loader' , 'postcss-loader' ] } ,
75
+ { exclude : additionalFiles , test : / \.styl$ / , loaders : [ 'raw-loader' , 'postcss-loader' , 'stylus-loader' ] } ,
76
+ { exclude : additionalFiles , test : / \.less$ / , loaders : [ 'raw-loader' , 'postcss-loader' , 'less-loader' ] } ,
77
+ { exclude : additionalFiles , test : / \.scss$ | \.sass$ / , loaders : [ 'raw-loader' , 'postcss-loader' , 'sass-loader' ] } ,
78
+
79
+ // outside of main, load it via style-loader
80
+ { include : additionalFiles , test : / \.css$ / , loaders : [ 'style-loader' , 'css-loader' , 'postcss-loader' ] } ,
81
+ { include : additionalFiles , test : / \.styl$ / , loaders : [ 'style-loader' , 'css-loader' , 'postcss-loader' , 'stylus-loader' ] } ,
82
+ { include : additionalFiles , test : / \.less$ / , loaders : [ 'style-loader' , 'css-loader' , 'postcss-loader' , 'less-loader' ] } ,
83
+ { include : additionalFiles , test : / \.scss$ | \.sass$ / , loaders : [ 'style-loader' , 'css-loader' , 'postcss-loader' , 'sass-loader' ] } ,
84
+
85
+ { test : / \.json$ / , loader : 'json-loader' } ,
86
+ { test : / \. ( j p g | p n g ) $ / , loader : 'url-loader?limit=10000' } ,
87
+ { test : / \. h t m l $ / , loader : 'raw-loader' } ,
88
+
89
+ { test : / \. ( w o f f | w o f f 2 ) ( \? v = \d + \. \d + \. \d + ) ? $ / , loader : 'url?limit=10000&mimetype=application/font-woff' } ,
90
+ { test : / \. t t f ( \? v = \d + \. \d + \. \d + ) ? $ / , loader : 'url?limit=10000&mimetype=application/octet-stream' } ,
91
+ { test : / \. e o t ( \? v = \d + \. \d + \. \d + ) ? $ / , loader : 'file' } ,
92
+ { test : / \. s v g ( \? v = \d + \. \d + \. \d + ) ? $ / , loader : 'url?limit=10000&mimetype=image/svg+xml' }
49
93
]
50
94
} ,
51
95
plugins: [
52
96
new ForkCheckerPlugin ( ) ,
53
97
new HtmlWebpackPlugin ( {
54
- template : path . resolve ( projectRoot , `./ ${ sourceDir } / index.html` ) ,
98
+ template : path . resolve ( appRoot , appConfig . index ) ,
55
99
chunksSortMode : 'dependency'
56
100
} ) ,
101
+ new webpack . NormalModuleReplacementPlugin (
102
+ // escape the path to make a regex
103
+ // TODO: this isn't working!
104
+ new RegExp ( path . resolve ( appRoot , appConfig . environments . source )
105
+ . replace ( / [ \- \[ \] \/ \{ \} \( \) \* \+ \? \. \\ \^ \$ \| ] / g, "\\$&" ) ) ,
106
+ path . resolve ( appRoot , appConfig . environments [ environment ] )
107
+ ) ,
57
108
new webpack . optimize . CommonsChunkPlugin ( {
58
- name : [ 'polyfills' ]
109
+ name : separateBundles
110
+ . concat ( 'main' )
111
+ . map ( bundle => bundle . output )
112
+ . reverse ( )
59
113
} ) ,
60
114
new webpack . optimize . CommonsChunkPlugin ( {
61
115
minChunks : Infinity ,
@@ -64,9 +118,9 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
64
118
sourceMapFilename : 'inline.map'
65
119
} ) ,
66
120
new CopyWebpackPlugin ( [ {
67
- context : path . resolve ( projectRoot , './public' ) ,
121
+ context : path . resolve ( appRoot , appConfig . assets ) ,
68
122
from : '**/*' ,
69
- to : path . resolve ( projectRoot , './dist' )
123
+ to : path . resolve ( projectRoot , appConfig . outDir , appConfig . assets )
70
124
} ] )
71
125
] ,
72
126
node : {
@@ -79,3 +133,4 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
79
133
}
80
134
}
81
135
} ;
136
+
0 commit comments