]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/config/webpack.prod.js
Design signup and login pages
[github/Chocobozzz/PeerTube.git] / client / config / webpack.prod.js
index ddc9343a706535b9aae0515d850436c2895fb6f2..e2dde854de12f5ae3f4922a7552b0e1b6dd2ae35 100644 (file)
@@ -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'
         })
       ],