diff --git a/packages/@angular/cli/commands/build.ts b/packages/@angular/cli/commands/build.ts index 9630918f2e..d3778a8ab9 100644 --- a/packages/@angular/cli/commands/build.ts +++ b/packages/@angular/cli/commands/build.ts @@ -220,6 +220,11 @@ const BuildCommand = Command.extend({ commandOptions.vendorChunk = !commandOptions.buildOptimizer; } + // Force commonjs module format for TS on dev watch builds. + if (commandOptions.target === 'development' && commandOptions.watch === true) { + commandOptions.forceTsCommonjs = true; + } + const BuildTask = require('../tasks/build').default; const buildTask = new BuildTask({ diff --git a/packages/@angular/cli/commands/serve.ts b/packages/@angular/cli/commands/serve.ts index 384f6ef054..b4edd15d42 100644 --- a/packages/@angular/cli/commands/serve.ts +++ b/packages/@angular/cli/commands/serve.ts @@ -135,6 +135,11 @@ const ServeCommand = Command.extend({ commandOptions.vendorChunk = !commandOptions.buildOptimizer; } + // Force commonjs module format for TS on dev builds. + if (commandOptions.target === 'development') { + commandOptions.forceTsCommonjs = true; + } + // Default evalSourcemaps to true for serve. This makes rebuilds faster. commandOptions.evalSourcemaps = true; diff --git a/packages/@angular/cli/commands/test.ts b/packages/@angular/cli/commands/test.ts index a585b20b7d..40fa3ebaa6 100644 --- a/packages/@angular/cli/commands/test.ts +++ b/packages/@angular/cli/commands/test.ts @@ -24,6 +24,7 @@ export interface TestOptions { environment?: string; app?: string; preserveSymlinks?: boolean; + forceTsCommonjs?: boolean; } @@ -134,6 +135,13 @@ const TestCommand = Command.extend({ // if not watching ensure karma is doing a single run commandOptions.singleRun = true; } + + // Don't force commonjs for code coverage builds, some setups need es2015 for it. + // https://github.com/angular/angular-cli/issues/5526 + if (!commandOptions.codeCoverage) { + commandOptions.forceTsCommonjs = true; + } + return testTask.run(commandOptions); } }); diff --git a/packages/@angular/cli/models/build-options.ts b/packages/@angular/cli/models/build-options.ts index 4826d5eebe..ff605bb56d 100644 --- a/packages/@angular/cli/models/build-options.ts +++ b/packages/@angular/cli/models/build-options.ts @@ -30,4 +30,5 @@ export interface BuildOptions { buildOptimizer?: boolean; namedChunks?: boolean; subresourceIntegrity?: boolean; + forceTsCommonjs?: boolean; } diff --git a/packages/@angular/cli/models/webpack-configs/typescript.ts b/packages/@angular/cli/models/webpack-configs/typescript.ts index e00e212d35..780640b123 100644 --- a/packages/@angular/cli/models/webpack-configs/typescript.ts +++ b/packages/@angular/cli/models/webpack-configs/typescript.ts @@ -21,10 +21,17 @@ const webpackLoader: string = g['angularCliIsLocal'] function _createAotPlugin(wco: WebpackConfigOptions, options: any) { const { appConfig, projectRoot, buildOptions } = wco; options.compilerOptions = options.compilerOptions || {}; + if (wco.buildOptions.preserveSymlinks) { options.compilerOptions.preserveSymlinks = true; } + // Forcing commonjs seems to drastically improve rebuild speeds on webpack. + // Dev builds on watch mode will set this option to true. + if (wco.buildOptions.forceTsCommonjs) { + options.compilerOptions.module = 'commonjs'; + } + // Read the environment, and set it in the compiler host. let hostReplacementPaths: any = {}; // process environment file replacement diff --git a/packages/@angular/cli/tasks/test.ts b/packages/@angular/cli/tasks/test.ts index 42d647d78d..d9e75985bf 100644 --- a/packages/@angular/cli/tasks/test.ts +++ b/packages/@angular/cli/tasks/test.ts @@ -44,6 +44,7 @@ export default Task.extend({ poll: options.poll, environment: options.environment, preserveSymlinks: options.preserveSymlinks, + forceTsCommonjs: options.forceTsCommonjs, app: options.app };