Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions packages/@angular/cli/models/webpack-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@ import {
import * as path from 'path';
import { AngularCompilerPlugin } from '@ngtools/webpack';

export interface WebpackConfigOptions {
export interface WebpackConfigOptions<T extends BuildOptions = BuildOptions> {
projectRoot: string;
buildOptions: BuildOptions;
buildOptions: T;
appConfig: any;
}

export class NgCliWebpackConfig {
export class NgCliWebpackConfig<T extends BuildOptions = BuildOptions> {
public config: any;
public wco: WebpackConfigOptions;
constructor(buildOptions: BuildOptions, appConfig: any) {
public wco: WebpackConfigOptions<T>;
constructor(buildOptions: T, appConfig: any) {

this.validateBuildOptions(buildOptions);

Expand Down Expand Up @@ -59,7 +59,7 @@ export class NgCliWebpackConfig {
return this.config;
}

public getTargetConfig(webpackConfigOptions: WebpackConfigOptions): any {
public getTargetConfig(webpackConfigOptions: WebpackConfigOptions<T>): any {
switch (webpackConfigOptions.buildOptions.target) {
case 'development':
return getDevConfig(webpackConfigOptions);
Expand All @@ -86,8 +86,8 @@ export class NgCliWebpackConfig {
}

// Fill in defaults for build targets
public addTargetDefaults(buildOptions: BuildOptions): BuildOptions {
const targetDefaults: { [target: string]: BuildOptions } = {
public addTargetDefaults(buildOptions: T): T {
const targetDefaults: { [target: string]: Partial<BuildOptions> } = {
development: {
environment: 'dev',
outputHashing: 'media',
Expand All @@ -110,8 +110,8 @@ export class NgCliWebpackConfig {
}

// Fill in defaults from .angular-cli.json
public mergeConfigs(buildOptions: BuildOptions, appConfig: any, projectRoot: string) {
const mergeableOptions = {
public mergeConfigs(buildOptions: T, appConfig: any, projectRoot: string): T {
const mergeableOptions: Partial<BuildOptions> = {
outputPath: path.resolve(projectRoot, appConfig.outDir),
deployUrl: appConfig.deployUrl,
baseHref: appConfig.baseHref
Expand Down
4 changes: 2 additions & 2 deletions packages/@angular/cli/models/webpack-configs/development.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { NamedModulesPlugin } from 'webpack';

import { WebpackConfigOptions } from '../webpack-config';

export const getDevConfig = function (_wco: WebpackConfigOptions) {
export function getDevConfig(_wco: WebpackConfigOptions) {
return {
plugins: [new NamedModulesPlugin()]
};
};
}
4 changes: 2 additions & 2 deletions packages/@angular/cli/models/webpack-configs/production.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { readTsconfig } from '../../utilities/read-tsconfig';
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');


export const getProdConfig = function (wco: WebpackConfigOptions) {
export function getProdConfig(wco: WebpackConfigOptions) {
const { projectRoot, buildOptions, appConfig } = wco;

let extraPlugins: any[] = [];
Expand Down Expand Up @@ -159,4 +159,4 @@ export const getProdConfig = function (wco: WebpackConfigOptions) {
...extraPlugins
]
};
};
}
4 changes: 2 additions & 2 deletions packages/@angular/cli/models/webpack-configs/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { WebpackConfigOptions } from '../webpack-config';
* Returns a partial specific to creating a bundle for node
* @param _wco Options which are include the build options and app config
*/
export const getServerConfig = function (_wco: WebpackConfigOptions) {
export function getServerConfig(_wco: WebpackConfigOptions) {
return {
target: 'node',
output: {
Expand Down Expand Up @@ -35,4 +35,4 @@ export const getServerConfig = function (_wco: WebpackConfigOptions) {
}
]
};
};
}
11 changes: 5 additions & 6 deletions packages/@angular/cli/models/webpack-configs/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as webpack from 'webpack';

import { CliConfig } from '../config';
import { WebpackTestOptions } from '../webpack-test-config';
import { WebpackConfigOptions } from '../webpack-config';


/**
Expand All @@ -15,16 +16,14 @@ import { WebpackTestOptions } from '../webpack-test-config';
*/


export function getTestConfig(testConfig: WebpackTestOptions) {
export function getTestConfig(wco: WebpackConfigOptions<WebpackTestOptions>) {
const { projectRoot, buildOptions, appConfig } = wco;

const configPath = CliConfig.configFilePath();
const projectRoot = path.dirname(configPath);
const appConfig = CliConfig.fromProject().config.apps[0];
const nodeModules = path.resolve(projectRoot, 'node_modules');
const extraRules: any[] = [];
const extraPlugins: any[] = [];

if (testConfig.codeCoverage && CliConfig.fromProject()) {
if (buildOptions.codeCoverage && CliConfig.fromProject()) {
const codeCoverageExclude = CliConfig.fromProject().get('test.codeCoverage.exclude');
let exclude: (string | RegExp)[] = [
/\.(e2e|spec)\.ts$/,
Expand All @@ -49,7 +48,7 @@ export function getTestConfig(testConfig: WebpackTestOptions) {
}

return {
devtool: testConfig.sourcemaps ? 'inline-source-map' : 'eval',
devtool: buildOptions.sourcemaps ? 'inline-source-map' : 'eval',
entry: {
main: path.resolve(projectRoot, appConfig.root, appConfig.test)
},
Expand Down
12 changes: 6 additions & 6 deletions packages/@angular/cli/models/webpack-configs/typescript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,17 @@ function _createAotPlugin(wco: WebpackConfigOptions, options: any) {
}
}

export const getNonAotConfig = function(wco: WebpackConfigOptions) {
export function getNonAotConfig(wco: WebpackConfigOptions) {
const { appConfig, projectRoot } = wco;
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);

return {
module: { rules: [{ test: /\.ts$/, loader: webpackLoader }] },
plugins: [ _createAotPlugin(wco, { tsConfigPath, skipCodeGeneration: true }) ]
};
};
}

export const getAotConfig = function(wco: WebpackConfigOptions) {
export function getAotConfig(wco: WebpackConfigOptions) {
const { projectRoot, buildOptions, appConfig } = wco;
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
const testTsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.testTsconfig);
Expand All @@ -119,9 +119,9 @@ export const getAotConfig = function(wco: WebpackConfigOptions) {
module: { rules: [{ test: /\.ts$/, use: [...boLoader, webpackLoader] }] },
plugins: [ _createAotPlugin(wco, pluginOptions) ]
};
};
}

export const getNonAotTestConfig = function(wco: WebpackConfigOptions) {
export function getNonAotTestConfig(wco: WebpackConfigOptions) {
const { projectRoot, appConfig } = wco;
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.testTsconfig);
const appTsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
Expand All @@ -137,4 +137,4 @@ export const getNonAotTestConfig = function(wco: WebpackConfigOptions) {
module: { rules: [{ test: /\.ts$/, loader: webpackLoader }] },
plugins: [ _createAotPlugin(wco, pluginOptions) ]
};
};
}
8 changes: 4 additions & 4 deletions packages/@angular/cli/models/webpack-test-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@ import {
export interface WebpackTestOptions extends BuildOptions {
codeCoverage?: boolean;
}
export class WebpackTestConfig extends NgCliWebpackConfig {
constructor(private testOptions: WebpackTestOptions, appConfig: any) {
export class WebpackTestConfig extends NgCliWebpackConfig<WebpackTestOptions> {
constructor(testOptions: WebpackTestOptions, appConfig: any) {
super(testOptions, appConfig);
}

public buildConfig() {
let webpackConfigs = [
const webpackConfigs = [
getCommonConfig(this.wco),
getStylesConfig(this.wco),
this.getTargetConfig(this.wco),
getNonAotTestConfig(this.wco),
getTestConfig(this.testOptions)
getTestConfig(this.wco)
];

this.config = webpackMerge(webpackConfigs);
Expand Down