diff --git a/packages/angular-cli/models/webpack-build-common.ts b/packages/angular-cli/models/webpack-build-common.ts index b7493d287c89..72c1d194ecbc 100644 --- a/packages/angular-cli/models/webpack-build-common.ts +++ b/packages/angular-cli/models/webpack-build-common.ts @@ -37,16 +37,17 @@ export function getWebpackCommonConfig( ) { const appRoot = path.resolve(projectRoot, appConfig.root); - const appMain = path.resolve(appRoot, appConfig.main); const nodeModules = path.resolve(projectRoot, 'node_modules'); let extraPlugins: any[] = []; let extraRules: any[] = []; let lazyChunks: string[] = []; - let entryPoints: { [key: string]: string[] } = { - main: [appMain] - }; + let entryPoints: { [key: string]: string[] } = {}; + + if (appConfig.main) { + entryPoints['main'] = [path.resolve(appRoot, appConfig.main)]; + } // determine hashing format const hashFormat = getOutputHashFormat(outputHashing); diff --git a/packages/angular-cli/models/webpack-config.ts b/packages/angular-cli/models/webpack-config.ts index cc9e942b212a..52929f5b1f8d 100644 --- a/packages/angular-cli/models/webpack-config.ts +++ b/packages/angular-cli/models/webpack-config.ts @@ -35,14 +35,14 @@ export class NgCliWebpackConfig { deployUrl?: string, outputHashing?: string ) { - const config: CliConfig = CliConfig.fromProject(); - const appConfig = config.config.apps[0]; + const appConfig = CliConfig.fromProject().config.apps[0]; + const projectRoot = this.ngCliProject.root; appConfig.outDir = outputDir || appConfig.outDir; appConfig.deployUrl = deployUrl || appConfig.deployUrl; let baseConfig = getWebpackCommonConfig( - this.ngCliProject.root, + projectRoot, environment, appConfig, baseHref, @@ -52,28 +52,28 @@ export class NgCliWebpackConfig { progress, outputHashing ); - let targetConfigPartial = this.getTargetConfig( - this.ngCliProject.root, appConfig, sourcemap, verbose - ); - const typescriptConfigPartial = isAoT - ? getWebpackAotConfigPartial(this.ngCliProject.root, appConfig, i18nFile, i18nFormat, locale) - : getWebpackNonAotConfigPartial(this.ngCliProject.root, appConfig); + let targetConfigPartial = this.getTargetConfig(projectRoot, appConfig, sourcemap, verbose); if (appConfig.mobile) { - let mobileConfigPartial = getWebpackMobileConfigPartial(this.ngCliProject.root, appConfig); - let mobileProdConfigPartial = getWebpackMobileProdConfigPartial(this.ngCliProject.root, - appConfig); + let mobileConfigPartial = getWebpackMobileConfigPartial(projectRoot, appConfig); + let mobileProdConfigPartial = getWebpackMobileProdConfigPartial(projectRoot, appConfig); baseConfig = webpackMerge(baseConfig, mobileConfigPartial); if (this.target == 'production') { targetConfigPartial = webpackMerge(targetConfigPartial, mobileProdConfigPartial); } } - this.config = webpackMerge( - baseConfig, - targetConfigPartial, - typescriptConfigPartial - ); + let config = webpackMerge(baseConfig, targetConfigPartial); + + if (appConfig.main) { + const typescriptConfigPartial = isAoT + ? getWebpackAotConfigPartial(projectRoot, appConfig, i18nFile, i18nFormat, locale) + : getWebpackNonAotConfigPartial(projectRoot, appConfig); + + config = webpackMerge(config, typescriptConfigPartial); + } + + this.config = config; } getTargetConfig(projectRoot: string, appConfig: any, sourcemap: boolean, verbose: boolean): any { diff --git a/packages/angular-cli/tasks/serve-webpack.ts b/packages/angular-cli/tasks/serve-webpack.ts index 43f13b233f13..cfa87b994c47 100644 --- a/packages/angular-cli/tasks/serve-webpack.ts +++ b/packages/angular-cli/tasks/serve-webpack.ts @@ -56,6 +56,7 @@ export default Task.extend({ entryPoints.push('webpack/hot/dev-server'); config.plugins.push(new webpack.HotModuleReplacementPlugin()); } + if (!config.entry.main) { config.entry.main = []; } config.entry.main.unshift(...entryPoints); webpackCompiler = webpack(config); diff --git a/tests/e2e/tests/misc/minimal-config.ts b/tests/e2e/tests/misc/minimal-config.ts index 20b8591263c5..b04fbf2cecf9 100644 --- a/tests/e2e/tests/misc/minimal-config.ts +++ b/tests/e2e/tests/misc/minimal-config.ts @@ -1,5 +1,5 @@ -import { writeFile } from '../../utils/fs'; -import { ng } from '../../utils/process'; +import { writeFile, writeMultipleFiles } from '../../utils/fs'; +import { runServeAndE2e } from '../test/e2e'; export default function () { @@ -8,7 +8,33 @@ export default function () { apps: [{ root: 'src', main: 'main.ts' - }] + }], + e2e: { protractor: { config: './protractor.conf.js' } } }))) - .then(() => ng('build')); + .then(() => runServeAndE2e()) + .then(() => writeMultipleFiles({ + './src/script.js': ` + document.querySelector('app-root').innerHTML = '