* Webpack Plugins
*/
const DefinePlugin = require('webpack/lib/DefinePlugin')
+const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin')
const OptimizeJsPlugin = require('optimize-js-plugin')
-const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin')
const HashedModuleIdsPlugin = require('webpack/lib/HashedModuleIdsPlugin')
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
/**
* Webpack Constants
const ENV = process.env.NODE_ENV = process.env.ENV = 'production'
const HOST = process.env.HOST || 'localhost'
const PORT = process.env.PORT || 8080
-const METADATA = webpackMerge(commonConfig({env: ENV}).metadata, {
+const AOT = process.env.BUILD_AOT || helpers.hasNpmFlag('aot')
+const METADATA = {
host: HOST,
port: PORT,
ENV: ENV,
HMR: false,
+ AOT: AOT,
API_URL: ''
-})
+}
module.exports = function (env) {
return [
sourceMap: false
}),
- /**
- * Plugin: DedupePlugin
- * Description: Prevents the inclusion of duplicate code into your bundle
- * and instead applies a copy of the function at runtime.
- *
- * See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin
- * See: https://github.com/webpack/docs/wiki/optimization#deduplication
- */
- // new DedupePlugin(),
+ new ExtractTextPlugin({
+ filename: '[name].[contenthash].css',
+ allChunks: true
+ }),
/**
* Plugin: DefinePlugin
'ENV': JSON.stringify(METADATA.ENV),
'HMR': METADATA.HMR,
'API_URL': JSON.stringify(METADATA.API_URL),
+ 'AOT': METADATA.AOT,
'process.version': JSON.stringify(process.version),
- 'process.env': {
- 'ENV': JSON.stringify(METADATA.ENV),
- 'NODE_ENV': JSON.stringify(METADATA.ENV),
- 'HMR': METADATA.HMR
- }
+ 'process.env.ENV': JSON.stringify(METADATA.ENV),
+ 'process.env.NODE_ENV': JSON.stringify(METADATA.ENV),
+ 'process.env.HMR': METADATA.HMR
}),
/**
*
* See: https://webpack.github.io/docs/list-of-plugins.html#uglifyjsplugin
*/
- // NOTE: To debug prod builds uncomment //debug lines and comment //prod lines
new UglifyJsPlugin({
- // beautify: true, //debug
- // mangle: false, //debug
- // dead_code: false, //debug
- // unused: false, //debug
- // deadCode: false, //debug
- // compress: {
- // screw_ie8: true,
- // keep_fnames: true,
- // drop_debugger: false,
- // dead_code: false,
- // unused: false
- // }, // debug
- // comments: true, //debug
-
- beautify: false, // prod
- output: {
- comments: false
- }, // prod
- mangle: {
- screw_ie8: true
- }, // prod
- compress: {
- screw_ie8: true,
+ parallel: true,
+ uglifyOptions: {
+ ie8: false,
+ ecma: 6,
warnings: false,
- conditionals: true,
- unused: true,
- comparisons: true,
- sequences: true,
- dead_code: true,
- evaluate: true,
- if_return: true,
- join_vars: true,
- negate_iife: false // we need this for lazy v8
+ mangle: true,
+ output: {
+ comments: false,
+ beautify: false
+ }
}
}),
+ /**
+ * Plugin: NormalModuleReplacementPlugin
+ * Description: Replace resources that matches resourceRegExp with newResource
+ *
+ * See: http://webpack.github.io/docs/list-of-plugins.html#normalmodulereplacementplugin
+ */
new NormalModuleReplacementPlugin(
- /angular2-hmr/,
+ /(angular2|@angularclass)((\\|\/)|-)hmr/,
helpers.root('config/empty.js')
),
new HashedModuleIdsPlugin(),
/**
- * Plugin: IgnorePlugin
- * Description: Don’t generate modules for requests matching the provided RegExp.
- *
- * See: http://webpack.github.io/docs/list-of-plugins.html#ignoreplugin
- */
-
- // new IgnorePlugin(/angular2-hmr/),
-
- /**
- * Plugin: CompressionPlugin
- * Description: Prepares compressed versions of assets to serve
- * them with Content-Encoding
- *
- * See: https://github.com/webpack/compression-webpack-plugin
+ * AoT
*/
- // install compression-webpack-plugin
- // new CompressionPlugin({
- // regExp: /\.css$|\.html$|\.js$|\.map$/,
- // threshold: 2 * 1024
- // })
+ (AOT ? (
+ new NormalModuleReplacementPlugin(
+ /@angular(\\|\/)compiler/,
+ helpers.root('config/empty.js')
+ )
+ ) : (new LoaderOptionsPlugin({}))),
/**
* Plugin LoaderOptionsPlugin (experimental)
path: helpers.root('dist')
}
}
+ }),
+
+ new BundleAnalyzerPlugin({
+ // Can be `server`, `static` or `disabled`.
+ // In `server` mode analyzer will start HTTP server to show bundle report.
+ // In `static` mode single HTML file with bundle report will be generated.
+ // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting `generateStatsFile` to `true`.
+ analyzerMode: 'static',
+ // Path to bundle report file that will be generated in `static` mode.
+ // Relative to bundles output directory.
+ reportFilename: 'report.html',
+ // Automatically open report in default browser
+ openAnalyzer: false,
+ // If `true`, Webpack Stats JSON file will be generated in bundles output directory
+ generateStatsFile: true,
+ // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`.
+ // Relative to bundles output directory.
+ statsFilename: 'stats.json',
+ // Options for `stats.toJson()` method.
+ // For example you can exclude sources of your modules from stats file with `source: false` option.
+ // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21
+ statsOptions: null,
+ // Log level. Can be 'info', 'warn', 'error' or 'silent'.
+ logLevel: 'info'
})
],