From 52c22335347e5d223cbb75e4add593df5ebfd4f3 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Fri, 2 Sep 2016 23:24:51 +0300 Subject: [PATCH] Smaller bundle size by removing esprima dep from bundle --- build/webpack.dev.js | 24 +++++++++++++++--------- build/webpack.prod.js | 26 ++++++++++++++++---------- build/webpack.test.js | 24 +++++++++++++++--------- lib/polyfills.ts | 30 ++++++++++++++++++++++++++++-- lib/vendor.ts | 13 ++++++++----- manual-types/index.d.ts | 5 +++++ tsconfig.json | 10 ++++++---- 7 files changed, 93 insertions(+), 39 deletions(-) diff --git a/build/webpack.dev.js b/build/webpack.dev.js index 5ac0c436..831fbc35 100644 --- a/build/webpack.dev.js +++ b/build/webpack.dev.js @@ -12,13 +12,9 @@ module.exports = { debug: false, resolve: { - extensions: ['', '.ts', '.js', '.json', '.css', '.scss', '.html'], + extensions: ['', '.ts', '.js', '.json', '.css'], root: root('lib'), - descriptionFiles: ['package.json'], - modules: [ - 'node_modules', - root('lib') - ], + modulesDirectories: ['node_modules'], alias: { './lib/bootstrap': root('lib/bootstrap.dev'), http: 'stream-http', @@ -26,10 +22,17 @@ module.exports = { } }, externals: { - "jquery": "jQuery" + "jquery": "jQuery", + 'esprima': 'esprima' // optional dep of ys-yaml not needed for redoc }, node: { - fs: "empty" + fs: "empty", + crypto: "empty", + global: "window", + process: true, + module: false, + clearImmediate: false, + setImmediate: false }, entry: { 'redoc': './lib/index.ts', @@ -57,7 +60,10 @@ module.exports = { module: { preLoaders: [{ test: /\.js$/, - loader: 'source-map' + loader: 'source-map-loader', + exclude: [ + /node_modules/ + ] }], loaders: [{ test: /\.ts$/, diff --git a/build/webpack.prod.js b/build/webpack.prod.js index 96c9b71f..e234dd44 100644 --- a/build/webpack.prod.js +++ b/build/webpack.prod.js @@ -12,26 +12,29 @@ const BANNER = module.exports = { context: root(), - devtool: 'cheap-module-source-map', + devtool: 'source-map', resolve: { - extensions: ['', '.ts', '.js', '.json', '.css', '.scss', '.html'], + extensions: ['', '.ts', '.js', '.json', '.css'], root: root('lib'), - descriptionFiles: ['package.json'], - modules: [ - 'node_modules', - root('lib') - ], + modulesDirectories: ['node_modules'], alias: { http: 'stream-http', https: 'stream-http' } }, externals: { - "jquery": "jQuery" + 'jquery': 'jQuery', + 'esprima': 'esprima' // optional dep of ys-yaml not needed for redoc }, node: { - fs: "empty" + fs: "empty", + crypto: "empty", + global: "window", + process: true, + module: false, + clearImmediate: false, + setImmediate: false }, entry: { 'redoc': ['./lib/polyfills.ts', './lib/vendor.ts', './lib/index.ts'] @@ -49,7 +52,10 @@ module.exports = { module: { preLoaders: [{ test: /\.js$/, - loader: 'source-map' + loader: 'source-map-loader', + exclude: [ + /node_modules/ + ] }], loaders: [{ test: /\.ts$/, diff --git a/build/webpack.test.js b/build/webpack.test.js index 7e74aec9..ba223e6e 100644 --- a/build/webpack.test.js +++ b/build/webpack.test.js @@ -8,13 +8,9 @@ module.exports = { devtool: 'inline-source-map', resolve: { - extensions: ['', '.ts', '.js', '.json', '.css', '.scss', '.html'], + extensions: ['', '.ts', '.js', '.json', '.css'], root: root('lib'), - descriptionFiles: ['package.json'], - modules: [ - 'node_modules', - root('lib'), - ], + modulesDirectories: ['node_modules'], alias: { './lib/bootstrap': root('lib/bootstrap.dev'), http: 'stream-http', @@ -22,10 +18,17 @@ module.exports = { } }, externals: { - "jquery": "jQuery" + "jquery": "jQuery", + 'esprima': 'esprima' // optional dep of ys-yaml not needed for redoc }, node: { - fs: "empty" + fs: "empty", + crypto: "empty", + global: "window", + process: true, + module: false, + clearImmediate: false, + setImmediate: false }, output: { @@ -38,7 +41,10 @@ module.exports = { module: { preLoaders: [{ test: /\.js$/, - loader: 'source-map' + loader: 'source-map-loader', + exclude: [ + /node_modules/ + ] }], loaders: [ { test: /\.ts$/, diff --git a/lib/polyfills.ts b/lib/polyfills.ts index 33329a99..a5d5d8e4 100644 --- a/lib/polyfills.ts +++ b/lib/polyfills.ts @@ -1,4 +1,30 @@ -import 'core-js/es6'; +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/set'; +import 'core-js/es6/weak-map'; +import 'core-js/es6/weak-set'; +import 'core-js/es6/typed'; +import 'core-js/es6/reflect'; +// see issue https://github.com/AngularClass/angular2-webpack-starter/issues/709 +// import 'core-js/es6/promise'; + import 'core-js/es7/reflect'; -import 'ts-helpers'; import 'zone.js/dist/zone'; + +// Typescript emit helpers polyfill +import 'ts-helpers'; + +if (!IS_PRODUCTION) { + Error.stackTraceLimit = Infinity; + require('zone.js/dist/long-stack-trace-zone'); +} diff --git a/lib/vendor.ts b/lib/vendor.ts index 8a5df237..e6d13941 100644 --- a/lib/vendor.ts +++ b/lib/vendor.ts @@ -23,9 +23,12 @@ import 'dropkickjs/build/css/dropkick.css'; import 'prismjs/themes/prism-dark.css'; import 'hint.css/hint.base.css'; -import '@angular/common'; -import '@angular/core'; -import '@angular/platform-browser'; +if (!IS_PRODUCTION) { + require('@angular/platform-browser'); + require('@angular/platform-browser-dynamic'); + require('@angular/core'); + require('@angular/common'); -// RxJS -import 'rxjs/Rx'; + // RxJS + require('rxjs/Rx'); +} diff --git a/manual-types/index.d.ts b/manual-types/index.d.ts index 9fc4b783..22733ca1 100644 --- a/manual-types/index.d.ts +++ b/manual-types/index.d.ts @@ -14,3 +14,8 @@ declare module "*.css" { declare var LIB_VERSION: any; declare var IS_PRODUCTION: any; + +interface ErrorStackTraceLimit { + stackTraceLimit: number; +} +interface ErrorConstructor extends ErrorStackTraceLimit {} diff --git a/tsconfig.json b/tsconfig.json index 69c9d550..bbf26276 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,11 +2,11 @@ "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true, - "module": "es6", + "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": true, - "outDir": ".tmp/lib", + "outDir": ".tmp", "pretty": true, "moduleResolution": "node", "types": [ @@ -21,10 +21,12 @@ "exclude": [ "node_modules", - ".tmp" + ".tmp", + "dist" ], "awesomeTypescriptLoaderOptions": { "resolveGlobs": true, - "forkChecker": true + "forkChecker": true, + "useWebpackText": true } }