1
+ import * as fs from 'fs' ;
1
2
import * as path from 'path' ;
2
- import { AotPlugin } from '@ngtools/webpack' ;
3
+ import { AotPlugin , AotPluginOptions } from '@ngtools/webpack' ;
3
4
import { WebpackConfigOptions } from '../webpack-config' ;
4
5
5
6
@@ -9,6 +10,39 @@ const webpackLoader: string = g['angularCliIsLocal']
9
10
: '@ngtools/webpack' ;
10
11
11
12
13
+ function _createAotPlugin ( wco : WebpackConfigOptions , options : any ) {
14
+ const { appConfig, projectRoot, buildOptions } = wco ;
15
+
16
+ // Read the environment, and set it in the compiler host.
17
+ let hostOverrideFileSystem : any = { } ;
18
+ // process environment file replacement
19
+ if ( appConfig . environments ) {
20
+ if ( ! ( 'source' in appConfig . environments ) ) {
21
+ throw new SilentError ( `Environment configuration does not contain "source" entry.` ) ;
22
+ }
23
+ if ( ! ( buildOptions . environment in appConfig . environments ) ) {
24
+ throw new SilentError ( `Environment "${ buildOptions . environment } " does not exist.` ) ;
25
+ }
26
+
27
+ const appRoot = path . resolve ( projectRoot , appConfig . root ) ;
28
+ const sourcePath = appConfig . environments [ 'source' ] ;
29
+ const envFile = appConfig . environments [ buildOptions . environment ] ;
30
+ const environmentContent = fs . readFileSync ( path . join ( appRoot , envFile ) ) . toString ( ) ;
31
+
32
+ hostOverrideFileSystem = { [ path . join ( appRoot , sourcePath ) ] : environmentContent } ;
33
+ }
34
+
35
+ return new AotPlugin ( Object . assign ( { } , {
36
+ tsConfigPath : path . resolve ( projectRoot , appConfig . root , appConfig . tsconfig ) ,
37
+ mainPath : path . join ( projectRoot , appConfig . root , appConfig . main ) ,
38
+ i18nFile : buildOptions . i18nFile ,
39
+ i18nFormat : buildOptions . i18nFormat ,
40
+ locale : buildOptions . locale ,
41
+ hostOverrideFileSystem
42
+ } , options ) ) ;
43
+ }
44
+
45
+
12
46
export const getNonAotConfig = function ( wco : WebpackConfigOptions ) {
13
47
const { projectRoot, appConfig } = wco ;
14
48
let exclude = [ '**/*.spec.ts' ] ;
@@ -24,18 +58,13 @@ export const getNonAotConfig = function(wco: WebpackConfigOptions) {
24
58
]
25
59
} ,
26
60
plugins : [
27
- new AotPlugin ( {
28
- tsConfigPath : path . resolve ( projectRoot , appConfig . root , appConfig . tsconfig ) ,
29
- mainPath : path . join ( projectRoot , appConfig . root , appConfig . main ) ,
30
- exclude : exclude ,
31
- skipCodeGeneration : true
32
- } ) ,
61
+ _createAotPlugin ( wco , { exclude, skipCodeGeneration : true } ) ,
33
62
]
34
63
} ;
35
64
} ;
36
65
37
66
export const getAotConfig = function ( wco : WebpackConfigOptions ) {
38
- const { projectRoot, buildOptions , appConfig } = wco ;
67
+ const { projectRoot, appConfig } = wco ;
39
68
let exclude = [ '**/*.spec.ts' ] ;
40
69
if ( appConfig . test ) { exclude . push ( path . join ( projectRoot , appConfig . root , appConfig . test ) ) ; } ;
41
70
return {
@@ -49,14 +78,7 @@ export const getAotConfig = function(wco: WebpackConfigOptions) {
49
78
]
50
79
} ,
51
80
plugins : [
52
- new AotPlugin ( {
53
- tsConfigPath : path . resolve ( projectRoot , appConfig . root , appConfig . tsconfig ) ,
54
- mainPath : path . join ( projectRoot , appConfig . root , appConfig . main ) ,
55
- i18nFile : buildOptions . i18nFile ,
56
- i18nFormat : buildOptions . i18nFormat ,
57
- locale : buildOptions . locale ,
58
- exclude : exclude
59
- } )
81
+ _createAotPlugin ( wco , { exclude } )
60
82
]
61
83
} ;
62
84
} ;
0 commit comments