// @AngularClass /* * Helper * env(), getBanner(), root(), and rootDir() * are defined at the bottom */ var sliceArgs = Function.prototype.call.bind(Array.prototype.slice); var toString = Function.prototype.call.bind(Object.prototype.toString); var NODE_ENV = process.env.NODE_ENV || 'development'; var pkg = require('./package.json'); // Polyfill Object.assign = require('object-assign'); // Node var path = require('path'); // NPM var webpack = require('webpack'); // Webpack Plugins var OccurenceOrderPlugin = webpack.optimize.OccurenceOrderPlugin; var CommonsChunkPlugin = webpack.optimize.CommonsChunkPlugin; var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin; var DedupePlugin = webpack.optimize.DedupePlugin; var DefinePlugin = webpack.DefinePlugin; var BannerPlugin = webpack.BannerPlugin; /* * Config */ module.exports = { devtool: 'source-map', debug: true, cache: true, verbose: true, displayErrorDetails: true, context: root(), stats: { colors: true, reasons: true }, // our Development Server config devServer: { inline: true, colors: true, historyApiFallback: true, contentBase: 'src/public', publicPath: '/__build__' }, // entry: { 'bootstrap-client': [ // Angular 2 Deps 'zone.js', '@reactivex/rxjs', 'reflect-metadata', // to ensure these modules are grouped together in one file 'angular2/angular2', 'angular2/core', 'angular2/router', 'angular2/http', './src/app/bootstrap-client' ], 'bootstrap-ui': [ 'zone.js', '@reactivex/rxjs', 'reflect-metadata', 'angular2/web_worker/ui', './src/app/bootstrap-ui' ], 'bootstrap-worker': [ 'zone.js', '@reactivex/rxjs', 'reflect-metadata', 'angular2/web_worker/worker', 'angular2/angular2', 'angular2/router', 'angular2/http', './src/app/bootstrap-worker' ] }, // Config for our build files output: { path: root('__build__'), filename: '[name].js', sourceMapFilename: '[name].js.map', chunkFilename: '[id].chunk.js' // publicPath: 'http://mycdn.com/' }, resolve: { root: root(), extensions: ['','.ts','.js','.json'], alias: { 'rx': '@reactivex/rxjs' // 'common': 'src/common', // 'bindings': 'src/bindings', // 'components': 'src/app/components' // 'services': 'src/app/services', // 'stores': 'src/app/stores' } }, module: { loaders: [ // Support for *.json files. { test: /\.json$/, loader: 'json' }, // Support for CSS as raw text { test: /\.css$/, loader: 'raw' }, // support for .html as raw text { test: /\.html$/, loader: 'raw' }, // Support for .ts files. { test: /\.ts$/, loader: 'ts', query: { 'ignoreDiagnostics': [ // 2300, // 2300 -> Duplicate identifier // 2309 // 2309 -> An export assignment cannot be used in a module with other exported elements. ] }, exclude: [ /\.min\.js$/, /\.spec\.ts$/, /\.e2e\.ts$/, /web_modules/, /test/, /node_modules/ ] } ], noParse: [ /rtts_assert\/src\/rtts_assert/, /reflect-metadata/ ] }, plugins: [ // new DefinePlugin({ // 'process.env.NODE_ENV': JSON.stringify(NODE_ENV), // 'VERSION': JSON.stringify(pkg.version) // }), // new OccurenceOrderPlugin(), // new DedupePlugin() ], /* * When using `templateUrl` and `styleUrls` please use `__filename` * rather than `module.id` for `moduleId` in `@View` */ node: { crypto: false, __filename: true } }; // Helper functions function env(configEnv) { if (configEnv === undefined) { return configEnv; } switch (toString(configEnv[NODE_ENV])) { case '[object Object]' : return Object.assign({}, configEnv.all || {}, configEnv[NODE_ENV]); case '[object Array]' : return [].concat(configEnv.all || [], configEnv[NODE_ENV]); case '[object Undefined]' : return configEnv.all; default : return configEnv[NODE_ENV]; } } function getBanner() { return 'Angular2 Webpack Starter v'+ pkg.version +' by @gdi2990 from @AngularClass'; } function root(args) { args = sliceArgs(arguments, 0); return path.join.apply(path, [__dirname].concat(args)); } function rootNode(args) { args = sliceArgs(arguments, 0); return root.apply(path, ['node_modules'].concat(args)); }