Skip to content

refactor(@angular/cli): centralize ES2015 support checks #8214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 2, 2017
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
11 changes: 10 additions & 1 deletion packages/@angular/cli/models/webpack-config.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -20,6 +23,7 @@ export interface WebpackConfigOptions<T extends BuildOptions = BuildOptions> {
buildOptions: T;
appConfig: any;
tsConfig: any;
supportES2015: boolean;
}

export class NgCliWebpackConfig<T extends BuildOptions = BuildOptions> {
Expand All @@ -39,7 +43,12 @@ export class NgCliWebpackConfig<T extends BuildOptions = BuildOptions> {
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() {
Expand Down
8 changes: 1 addition & 7 deletions packages/@angular/cli/models/webpack-configs/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[] = [];
Expand Down Expand Up @@ -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'
]
},
Expand Down
11 changes: 1 addition & 10 deletions packages/@angular/cli/models/webpack-configs/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[] } = {};
Expand Down Expand Up @@ -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);
Expand Down
12 changes: 1 addition & 11 deletions packages/@angular/cli/models/webpack-configs/production.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');

Expand All @@ -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[] } = {};

Expand Down Expand Up @@ -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: [
Expand All @@ -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,
Expand Down
8 changes: 1 addition & 7 deletions packages/@angular/cli/models/webpack-configs/server.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
import { WebpackConfigOptions } from '../webpack-config';
import { requireProjectModule } from '../../utilities/require-project-module';

/**
* Returns a partial specific to creating a bundle for node
* @param wco Options which are include the build options and app config
*/
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',
],
},
Expand Down