X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fconfig%2Fwebpack.prod.js;h=e2dde854de12f5ae3f4922a7552b0e1b6dd2ae35;hb=d235f6b0d1054a2a3451dacade927caefce8f30c;hp=ddc9343a706535b9aae0515d850436c2895fb6f2;hpb=202e72231750705b1a071d57206424eef1fc5be1;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/config/webpack.prod.js b/client/config/webpack.prod.js index ddc9343a7..e2dde854d 100644 --- a/client/config/webpack.prod.js +++ b/client/config/webpack.prod.js @@ -11,11 +11,13 @@ const videoEmbedConfig = require('./webpack.video-embed.js') * 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 @@ -23,13 +25,15 @@ const HashedModuleIdsPlugin = require('webpack/lib/HashedModuleIdsPlugin') 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 [ @@ -118,15 +122,10 @@ module.exports = function (env) { 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 @@ -142,12 +141,11 @@ module.exports = function (env) { '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 }), /** @@ -157,46 +155,28 @@ module.exports = function (env) { * * 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') ), @@ -208,26 +188,14 @@ module.exports = function (env) { 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) @@ -277,6 +245,30 @@ module.exports = function (env) { 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' }) ],