UNPKG

3.6 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const webpackMerge = require('webpack-merge');
4const config_1 = require("./config");
5const webpack_configs_1 = require("./webpack-configs");
6const path = require('path');
7class NgCliWebpackConfig {
8 constructor(buildOptions, appConfig) {
9 this.validateBuildOptions(buildOptions);
10 const configPath = config_1.CliConfig.configFilePath();
11 const projectRoot = path.dirname(configPath);
12 appConfig = this.addAppConfigDefaults(appConfig);
13 buildOptions = this.addTargetDefaults(buildOptions);
14 buildOptions = this.mergeConfigs(buildOptions, appConfig);
15 this.wco = { projectRoot, buildOptions, appConfig };
16 }
17 buildConfig() {
18 let webpackConfigs = [
19 webpack_configs_1.getCommonConfig(this.wco),
20 webpack_configs_1.getBrowserConfig(this.wco),
21 webpack_configs_1.getStylesConfig(this.wco),
22 this.getTargetConfig(this.wco)
23 ];
24 if (this.wco.appConfig.main || this.wco.appConfig.polyfills) {
25 const typescriptConfigPartial = this.wco.buildOptions.aot
26 ? webpack_configs_1.getAotConfig(this.wco)
27 : webpack_configs_1.getNonAotConfig(this.wco);
28 webpackConfigs.push(typescriptConfigPartial);
29 }
30 this.config = webpackMerge(webpackConfigs);
31 return this.config;
32 }
33 getTargetConfig(webpackConfigOptions) {
34 switch (webpackConfigOptions.buildOptions.target) {
35 case 'development':
36 return webpack_configs_1.getDevConfig(webpackConfigOptions);
37 case 'production':
38 return webpack_configs_1.getProdConfig(webpackConfigOptions);
39 }
40 }
41 // Validate build options
42 validateBuildOptions(buildOptions) {
43 buildOptions.target = buildOptions.target || 'development';
44 if (buildOptions.target !== 'development' && buildOptions.target !== 'production') {
45 throw new Error("Invalid build target. Only 'development' and 'production' are available.");
46 }
47 }
48 // Fill in defaults for build targets
49 addTargetDefaults(buildOptions) {
50 const targetDefaults = {
51 development: {
52 environment: 'dev',
53 outputHashing: 'media',
54 sourcemap: true,
55 extractCss: false
56 },
57 production: {
58 environment: 'prod',
59 outputHashing: 'all',
60 sourcemap: false,
61 extractCss: true,
62 aot: true
63 }
64 };
65 return Object.assign({}, targetDefaults[buildOptions.target], buildOptions);
66 }
67 // Fill in defaults from .angular-cli.json
68 mergeConfigs(buildOptions, appConfig) {
69 const mergeableOptions = {
70 outputPath: appConfig.outDir,
71 deployUrl: appConfig.deployUrl
72 };
73 return Object.assign({}, mergeableOptions, buildOptions);
74 }
75 addAppConfigDefaults(appConfig) {
76 const appConfigDefaults = {
77 testTsconfig: appConfig.tsconfig,
78 scripts: [],
79 styles: []
80 };
81 // can't use Object.assign here because appConfig has a lot of getters/setters
82 for (let key of Object.keys(appConfigDefaults)) {
83 appConfig[key] = appConfig[key] || appConfigDefaults[key];
84 }
85 return appConfig;
86 }
87}
88exports.NgCliWebpackConfig = NgCliWebpackConfig;
89//# sourceMappingURL=/users/hans/sources/angular-cli/models/webpack-config.js.map
\No newline at end of file