// const ProvidePlugin = require('webpack/lib/ProvidePlugin')
const DefinePlugin = require('webpack/lib/DefinePlugin')
const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin')
+const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
// const IgnorePlugin = require('webpack/lib/IgnorePlugin')
// const DedupePlugin = require('webpack/lib/optimize/DedupePlugin')
const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin')
module.exports = function (env) {
return webpackMerge(commonConfig({env: ENV}), {
/**
- * Switch loaders to debug mode.
- *
- * See: http://webpack.github.io/docs/configuration.html#debug
- */
- debug: false,
-
- /**
- * Developer tool to enhance debugging
- *
- * See: http://webpack.github.io/docs/configuration.html#devtool
- * See: https://github.com/webpack/docs/wiki/build-performance#sourcemaps
- */
+ * Developer tool to enhance debugging
+ *
+ * See: http://webpack.github.io/docs/configuration.html#devtool
+ * See: https://github.com/webpack/docs/wiki/build-performance#sourcemaps
+ */
devtool: 'source-map',
/**
- * Options affecting the output of the compilation.
- *
- * See: http://webpack.github.io/docs/configuration.html#output
- */
+ * Options affecting the output of the compilation.
+ *
+ * See: http://webpack.github.io/docs/configuration.html#output
+ */
output: {
+
/**
- * The output directory as absolute path (required).
- *
- * See: http://webpack.github.io/docs/configuration.html#output-path
- */
+ * The output directory as absolute path (required).
+ *
+ * See: http://webpack.github.io/docs/configuration.html#output-path
+ */
path: helpers.root('dist'),
/**
- * Specifies the name of each output file on disk.
- * IMPORTANT: You must not specify an absolute path here!
- *
- * See: http://webpack.github.io/docs/configuration.html#output-filename
- */
+ * Specifies the name of each output file on disk.
+ * IMPORTANT: You must not specify an absolute path here!
+ *
+ * See: http://webpack.github.io/docs/configuration.html#output-filename
+ */
filename: '[name].[chunkhash].bundle.js',
/**
- * The filename of the SourceMaps for the JavaScript files.
- * They are inside the output.path directory.
- *
- * See: http://webpack.github.io/docs/configuration.html#output-sourcemapfilename
- */
+ * The filename of the SourceMaps for the JavaScript files.
+ * They are inside the output.path directory.
+ *
+ * See: http://webpack.github.io/docs/configuration.html#output-sourcemapfilename
+ */
sourceMapFilename: '[name].[chunkhash].bundle.map',
/**
- * The filename of non-entry chunks as relative path
- * inside the output.path directory.
- *
- * See: http://webpack.github.io/docs/configuration.html#output-chunkfilename
- */
- chunkFilename: '[id].[chunkhash].chunk.js'
+ * The filename of non-entry chunks as relative path
+ * inside the output.path directory.
+ *
+ * See: http://webpack.github.io/docs/configuration.html#output-chunkfilename
+ */
+ chunkFilename: '[id].[chunkhash].chunk.js',
+ publicPath: '/client/'
},
externals: {
'HMR': METADATA.HMR
}
}),
-
- /**
- * Plugin: UglifyJsPlugin
- * Description: Minimize all JavaScript output of chunks.
- * Loaders are switched into minimizing mode.
- *
- * See: https://webpack.github.io/docs/list-of-plugins.html#uglifyjsplugin
- */
+/**
+ * Plugin: UglifyJsPlugin
+ * Description: Minimize all JavaScript output of chunks.
+ * Loaders are switched into minimizing mode.
+ *
+ * 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
// comments: true, //debug
beautify: false, // prod
- mangle: { screw_ie8: true, keep_fnames: true }, // prod
- compress: { screw_ie8: true }, // prod
+ mangle: {
+ screw_ie8: true,
+ keep_fnames: true
+ }, // prod
+ compress: {
+ screw_ie8: true,
+ warnings: false
+ }, // prod
comments: false // prod
}),
new NormalModuleReplacementPlugin(
/angular2-hmr/,
helpers.root('config/modules/angular2-hmr-prod.js')
- )
+ ),
/**
- * Plugin: CompressionPlugin
- * Description: Prepares compressed versions of assets to serve
- * them with Content-Encoding
- *
- * See: https://github.com/webpack/compression-webpack-plugin
- */
+ * 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
+ */
+ // install compression-webpack-plugin
// new CompressionPlugin({
// regExp: /\.css$|\.html$|\.js$|\.map$/,
// threshold: 2 * 1024
// })
- ],
+ /**
+ * Plugin LoaderOptionsPlugin (experimental)
+ *
+ * See: https://gist.github.com/sokra/27b24881210b56bbaff7
+ */
+ new LoaderOptionsPlugin({
+ debug: false,
+ options: {
- /**
- * Static analysis linter for TypeScript advanced options configuration
- * Description: An extensible linter for the TypeScript language.
- *
- * See: https://github.com/wbuchwalter/tslint-loader
- */
- tslint: {
- emitErrors: true,
- failOnHint: true,
- resourcePath: 'src'
- },
+ /**
+ * Static analysis linter for TypeScript advanced options configuration
+ * Description: An extensible linter for the TypeScript language.
+ *
+ * See: https://github.com/wbuchwalter/tslint-loader
+ */
+ tslint: {
+ emitErrors: true,
+ failOnHint: true,
+ resourcePath: 'src'
+ },
- /**
- * Html loader advanced options
- *
- * See: https://github.com/webpack/html-loader#advanced-options
- */
- // TODO: Need to workaround Angular 2's html syntax => #id [bind] (event) *ngFor
- htmlLoader: {
- minimize: true,
- removeAttributeQuotes: false,
- caseSensitive: true,
- customAttrSurround: [
- [/#/, /(?:)/],
- [/\*/, /(?:)/],
- [/\[?\(?/, /(?:)/]
- ],
- customAttrAssign: [/\)?\]?=/]
- },
+ /**
+ * Html loader advanced options
+ *
+ * See: https://github.com/webpack/html-loader#advanced-options
+ */
+ // TODO: Need to workaround Angular 2's html syntax => #id [bind] (event) *ngFor
+ htmlLoader: {
+ minimize: true,
+ removeAttributeQuotes: false,
+ caseSensitive: true,
+ customAttrSurround: [
+ [/#/, /(?:)/],
+ [/\*/, /(?:)/],
+ [/\[?\(?/, /(?:)/]
+ ],
+ customAttrAssign: [/\)?]?=/]
+ },
+
+ // FIXME: Remove
+ // https://github.com/bholloway/resolve-url-loader/issues/36
+ // https://github.com/jtangelder/sass-loader/issues/289
+ context: __dirname,
+ output: {
+ path: helpers.root('dist')
+ }
+ }
+ })
+ ],
/*
- * Include polyfills or mocks for various node stuff
- * Description: Node configuration
- *
- * See: https://webpack.github.io/docs/configuration.html#node
- */
+ * Include polyfills or mocks for various node stuff
+ * Description: Node configuration
+ *
+ * See: https://webpack.github.io/docs/configuration.html#node
+ */
node: {
- global: 'window',
+ global: true,
crypto: 'empty',
process: false,
module: false,