explore-services/portal-2/webpack.prod.config.ts

179 lines
4.8 KiB
TypeScript

const webpack = require('webpack');
const path = require('path');
const clone = require('js.clone');
const webpackMerge = require('webpack-merge');
const V8LazyParseWebpackPlugin = require('v8-lazy-parse-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
import webpackConfig, { root, includeClientPackages } from './webpack.config';
// const CompressionPlugin = require('compression-webpack-plugin');
export const commonPlugins = [
new V8LazyParseWebpackPlugin(),
new webpack.DefinePlugin({
// do not use an object for 'process.env' otherwise all other environment
// variables are set to 'undefined' see issue #291
'process.env.NODE_ENV': JSON.stringify('production'),
'process.env.AOT': true
}),
// Loader options
new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false
}),
new webpack.NormalModuleReplacementPlugin(
/facade(\\|\/)async/,
root('node_modules/@angular/core/src/facade/async.js')
),
new webpack.NormalModuleReplacementPlugin(
/facade(\\|\/)collection/,
root('node_modules/@angular/core/src/facade/collection.js')
),
new webpack.NormalModuleReplacementPlugin(
/facade(\\|\/)errors/,
root('node_modules/@angular/core/src/facade/errors.js')
),
new webpack.NormalModuleReplacementPlugin(
/facade(\\|\/)lang/,
root('node_modules/@angular/core/src/facade/lang.js')
),
new webpack.NormalModuleReplacementPlugin(
/facade(\\|\/)math/,
root('node_modules/@angular/core/src/facade/math.js')
),
];
export const commonConfig = {
output: {
filename: '[name].bundle.js',
chunkFilename: '[chunkhash].js'
},
};
// Client.
export const clientPlugins = [
new BundleAnalyzerPlugin({
analyzerMode: 'disabled', // change it to `server` to view bundle stats
reportFilename: 'report.html',
generateStatsFile: true,
statsFilename: 'stats.json',
}),
// To use gzip, you can run 'npm install compression-webpack-plugin --save-dev'
// add 'var CompressionPlugin = require("compression-webpack-plugin");' on the top
// and comment out below codes
//
// new CompressionPlugin({
// asset: "[path].gz[query]",
// algorithm: "gzip",
// test: /\.js$|\.css$|\.html$/,
// threshold: 10240,
// minRatio: 0.8
// }),
new webpack.optimize.UglifyJsPlugin({
// beautify: true,
// mangle: false,
output: {
comments: false
},
compress: {
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
},
sourceMap: true
}),
new webpack.NormalModuleReplacementPlugin(
/@angular(\\|\/)upgrade/,
root('empty.js')
),
// problem with platformUniversalDynamic on the server/client
new webpack.NormalModuleReplacementPlugin(
/@angular(\\|\/)compiler/,
root('empty.js')
),
new webpack.NormalModuleReplacementPlugin(
/@angular(\\|\/)platform-browser-dynamic/,
root('empty.js')
),
new webpack.NormalModuleReplacementPlugin(
/dom(\\|\/)debug(\\|\/)ng_probe/,
root('empty.js')
),
new webpack.NormalModuleReplacementPlugin(
/dom(\\|\/)debug(\\|\/)by/,
root('empty.js')
),
new webpack.NormalModuleReplacementPlugin(
/src(\\|\/)debug(\\|\/)debug_node/,
root('empty.js')
),
new webpack.NormalModuleReplacementPlugin(
/src(\\|\/)debug(\\|\/)debug_renderer/,
root('empty.js')
),
// Waiting for https://github.com/ampedandwired/html-webpack-plugin/issues/446
// new webpack.optimize.AggressiveSplittingPlugin({
// minSize: 30000,
// maxSize: 250000
// }),
];
export const clientConfig = {
entry: './src/client.aot',
recordsOutputPath: root('webpack.records.json')
};
// Server.
export const serverPlugins = [
new webpack.optimize.UglifyJsPlugin({
// beautify: true,
mangle: false, // to ensure process.env still works
output: {
comments: false
},
compress: {
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
},
sourceMap: true
}),
];
export const serverConfig = {
entry: './src/server.aot',
output: {
filename: 'index.js',
chunkFilename: '[id].bundle.js',
crossOriginLoading: false
},
};
export default [
// Client
webpackMerge(webpackConfig[0], clone(commonConfig), clientConfig, {plugins: webpackConfig[0].plugins.concat(commonPlugins, clientPlugins) }),
// Server
webpackMerge(webpackConfig[1], clone(commonConfig), serverConfig, {plugins: webpackConfig[1].plugins.concat(commonPlugins, serverPlugins) })
];