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

This commit is contained in:
Charles Lyding 2017-10-25 19:44:19 -04:00 committed by Mike Brocchi
parent cb53fb933c
commit 00ca690807
5 changed files with 14 additions and 36 deletions

View File

@ -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<T extends BuildOptions = BuildOptions> {
buildOptions: T;
appConfig: any;
tsConfig: any;
supportES2015: boolean;
}
export class NgCliWebpackConfig<T extends BuildOptions = BuildOptions> {
@ -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() {

View File

@ -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'
]
},

View File

@ -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);

View File

@ -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,

View File

@ -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',
],
},