From 00ca690807a2326b6e8632a9a0ec46587b841a78 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 25 Oct 2017 19:44:19 -0400 Subject: [PATCH] refactor(@angular/cli): centralize ES2015 support checks --- packages/@angular/cli/models/webpack-config.ts | 11 ++++++++++- .../@angular/cli/models/webpack-configs/browser.ts | 8 +------- .../@angular/cli/models/webpack-configs/common.ts | 11 +---------- .../cli/models/webpack-configs/production.ts | 12 +----------- .../@angular/cli/models/webpack-configs/server.ts | 8 +------- 5 files changed, 14 insertions(+), 36 deletions(-) diff --git a/packages/@angular/cli/models/webpack-config.ts b/packages/@angular/cli/models/webpack-config.ts index fb73850085..81b4ffc830 100644 --- a/packages/@angular/cli/models/webpack-config.ts +++ b/packages/@angular/cli/models/webpack-config.ts @@ -1,5 +1,8 @@ +// @ignoreDep typescript - used only for type information +import * as ts from 'typescript'; import { AngularCompilerPlugin } from '@ngtools/webpack'; import { readTsconfig } from '../utilities/read-tsconfig'; +import { requireProjectModule } from '../utilities/require-project-module'; const webpackMerge = require('webpack-merge'); import { CliConfig } from './config'; import { BuildOptions } from './build-options'; @@ -20,6 +23,7 @@ export interface WebpackConfigOptions { buildOptions: T; appConfig: any; tsConfig: any; + supportES2015: boolean; } export class NgCliWebpackConfig { @@ -39,7 +43,12 @@ export class NgCliWebpackConfig { const tsconfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig); const tsConfig = readTsconfig(tsconfigPath); - this.wco = { projectRoot, buildOptions, appConfig, tsConfig }; + const projectTs = requireProjectModule(projectRoot, 'typescript') as typeof ts; + + const supportES2015 = tsConfig.options.target !== projectTs.ScriptTarget.ES3 + && tsConfig.options.target !== projectTs.ScriptTarget.ES5; + + this.wco = { projectRoot, buildOptions, appConfig, tsConfig, supportES2015 }; } public buildConfig() { diff --git a/packages/@angular/cli/models/webpack-configs/browser.ts b/packages/@angular/cli/models/webpack-configs/browser.ts index 3e731f4861..3ec6bb723a 100644 --- a/packages/@angular/cli/models/webpack-configs/browser.ts +++ b/packages/@angular/cli/models/webpack-configs/browser.ts @@ -8,14 +8,11 @@ import { packageChunkSort } from '../../utilities/package-chunk-sort'; import { BaseHrefWebpackPlugin } from '../../lib/base-href-webpack'; import { extraEntryParser, lazyChunksFilter } from './utils'; import { WebpackConfigOptions } from '../webpack-config'; -import { requireProjectModule } from '../../utilities/require-project-module'; export function getBrowserConfig(wco: WebpackConfigOptions) { const { projectRoot, buildOptions, appConfig } = wco; - const projectTs = requireProjectModule(projectRoot, 'typescript'); - const appRoot = path.resolve(projectRoot, appConfig.root); let extraPlugins: any[] = []; @@ -80,13 +77,10 @@ export function getBrowserConfig(wco: WebpackConfigOptions) { })); } - const supportES2015 = wco.tsConfig.options.target !== projectTs.ScriptTarget.ES3 - && wco.tsConfig.options.target !== projectTs.ScriptTarget.ES5; - return { resolve: { mainFields: [ - ...(supportES2015 ? ['es2015'] : []), + ...(wco.supportES2015 ? ['es2015'] : []), 'browser', 'module', 'main' ] }, diff --git a/packages/@angular/cli/models/webpack-configs/common.ts b/packages/@angular/cli/models/webpack-configs/common.ts index aa51438e8c..8c2111b255 100644 --- a/packages/@angular/cli/models/webpack-configs/common.ts +++ b/packages/@angular/cli/models/webpack-configs/common.ts @@ -30,8 +30,6 @@ export function getCommonConfig(wco: WebpackConfigOptions) { const appRoot = path.resolve(projectRoot, appConfig.root); const nodeModules = path.resolve(projectRoot, 'node_modules'); - const projectTs = requireProjectModule(projectRoot, 'typescript'); - let extraPlugins: any[] = []; let extraRules: any[] = []; let entryPoints: { [key: string]: string[] } = {}; @@ -159,18 +157,11 @@ export function getCommonConfig(wco: WebpackConfigOptions) { extraPlugins.push(new NamedLazyChunksWebpackPlugin()); } - // Read the tsconfig to determine if we should prefer ES2015 modules. - // Load rxjs path aliases. // https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md#build-and-treeshaking - - const supportES2015 = - wco.tsConfig.options.target !== projectTs.ScriptTarget.ES3 && - wco.tsConfig.options.target !== projectTs.ScriptTarget.ES5; - let alias = {}; try { - const rxjsPathMappingImport = supportES2015 + const rxjsPathMappingImport = wco.supportES2015 ? 'rxjs/_esm2015/path-mapping' : 'rxjs/_esm5/path-mapping'; const rxPaths = requireProjectModule(projectRoot, rxjsPathMappingImport); diff --git a/packages/@angular/cli/models/webpack-configs/production.ts b/packages/@angular/cli/models/webpack-configs/production.ts index 7666b98139..feab138462 100644 --- a/packages/@angular/cli/models/webpack-configs/production.ts +++ b/packages/@angular/cli/models/webpack-configs/production.ts @@ -8,8 +8,6 @@ import { PurifyPlugin } from '@angular-devkit/build-optimizer'; import { StaticAssetPlugin } from '../../plugins/static-asset'; import { GlobCopyWebpackPlugin } from '../../plugins/glob-copy-webpack-plugin'; import { WebpackConfigOptions } from '../webpack-config'; -import { readTsconfig } from '../../utilities/read-tsconfig'; -import { requireProjectModule } from '../../utilities/require-project-module'; const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); @@ -24,8 +22,6 @@ const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); export function getProdConfig(wco: WebpackConfigOptions) { const { projectRoot, buildOptions, appConfig } = wco; - const projectTs = requireProjectModule(projectRoot, 'typescript'); - let extraPlugins: any[] = []; let entryPoints: { [key: string]: string[] } = {}; @@ -123,12 +119,6 @@ export function getProdConfig(wco: WebpackConfigOptions) { uglifyCompressOptions.passes = 3; } - // Read the tsconfig to determine if we should apply ES6 uglify. - const tsconfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig); - const tsConfig = readTsconfig(tsconfigPath); - const supportES2015 = tsConfig.options.target !== projectTs.ScriptTarget.ES3 - && tsConfig.options.target !== projectTs.ScriptTarget.ES5; - return { entry: entryPoints, plugins: [ @@ -140,7 +130,7 @@ export function getProdConfig(wco: WebpackConfigOptions) { new UglifyJSPlugin({ sourceMap: buildOptions.sourcemaps, uglifyOptions: { - ecma: supportES2015 ? 6 : 5, + ecma: wco.supportES2015 ? 6 : 5, warnings: buildOptions.verbose, ie8: false, mangle: true, diff --git a/packages/@angular/cli/models/webpack-configs/server.ts b/packages/@angular/cli/models/webpack-configs/server.ts index 72b8f35bb5..dcfcecd0d6 100644 --- a/packages/@angular/cli/models/webpack-configs/server.ts +++ b/packages/@angular/cli/models/webpack-configs/server.ts @@ -1,5 +1,4 @@ import { WebpackConfigOptions } from '../webpack-config'; -import { requireProjectModule } from '../../utilities/require-project-module'; /** * Returns a partial specific to creating a bundle for node @@ -7,15 +6,10 @@ import { requireProjectModule } from '../../utilities/require-project-module'; */ export function getServerConfig(wco: WebpackConfigOptions) { - const projectTs = requireProjectModule(wco.projectRoot, 'typescript'); - - const supportES2015 = wco.tsConfig.options.target !== projectTs.ScriptTarget.ES3 - && wco.tsConfig.options.target !== projectTs.ScriptTarget.ES5; - const config: any = { resolve: { mainFields: [ - ...(supportES2015 ? ['es2015'] : []), + ...(wco.supportES2015 ? ['es2015'] : []), 'main', 'module', ], },