]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/config/webpack.prod.js
Client: adjust viewport height
[github/Chocobozzz/PeerTube.git] / client / config / webpack.prod.js
index 46db5448216381cc24c09b7b053797d0b7daadee..6d65fcb3739ff3305b9f9358db534dbe7b3f9c86 100644 (file)
@@ -9,11 +9,10 @@ const commonConfig = require('./webpack.common.js') // the settings that are com
 /**
  * Webpack Plugins
  */
-// const ProvidePlugin = require('webpack/lib/ProvidePlugin')
 const DefinePlugin = require('webpack/lib/DefinePlugin')
+const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
 const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin')
-// const IgnorePlugin = require('webpack/lib/IgnorePlugin')
-// const DedupePlugin = require('webpack/lib/optimize/DedupePlugin')
+const OptimizeJsPlugin = require('optimize-js-plugin')
 const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin')
 const WebpackMd5Hash = require('webpack-md5-hash')
 
@@ -33,57 +32,52 @@ const METADATA = webpackMerge(commonConfig({env: ENV}).metadata, {
 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: {
@@ -105,6 +99,17 @@ module.exports = function (env) {
        */
       new WebpackMd5Hash(),
 
+      /**
+       * Webpack plugin to optimize a JavaScript file for faster initial load
+       * by wrapping eagerly-invoked functions.
+       *
+       * See: https://github.com/vigneshshanmugam/optimize-js-plugin
+       */
+
+      new OptimizeJsPlugin({
+        sourceMap: false
+      }),
+
       /**
        * Plugin: DedupePlugin
        * Description: Prevents the inclusion of duplicate code into your bundle
@@ -134,14 +139,13 @@ module.exports = function (env) {
           '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
@@ -159,68 +163,147 @@ module.exports = function (env) {
         // comments: true, //debug
 
         beautify: false, // prod
-        mangle: { screw_ie8: true, keep_fnames: true }, // prod
-        compress: { screw_ie8: true }, // prod
-        comments: false // prod
+        output: {
+          comments: false
+        }, // prod
+        mangle: {
+          screw_ie8: true
+        }, // prod
+        compress: {
+          screw_ie8: true,
+          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
+        }
       }),
 
       new NormalModuleReplacementPlugin(
         /angular2-hmr/,
-        helpers.root('config/modules/angular2-hmr-prod.js')
-      )
+        helpers.root('config/empty.js')
+      ),
+
+      new NormalModuleReplacementPlugin(
+        /zone\.js(\\|\/)dist(\\|\/)long-stack-trace-zone/,
+        helpers.root('config/empty.js')
+      ),
+
+      // AoT
+      // new NormalModuleReplacementPlugin(
+      //   /@angular(\\|\/)upgrade/,
+      //   helpers.root('config/empty.js')
+      // ),
+      // new NormalModuleReplacementPlugin(
+      //   /@angular(\\|\/)compiler/,
+      //   helpers.root('config/empty.js')
+      // ),
+      // new NormalModuleReplacementPlugin(
+      //   /@angular(\\|\/)platform-browser-dynamic/,
+      //   helpers.root('config/empty.js')
+      // ),
+      // new NormalModuleReplacementPlugin(
+      //   /dom(\\|\/)debug(\\|\/)ng_probe/,
+      //   helpers.root('config/empty.js')
+      // ),
+      // new NormalModuleReplacementPlugin(
+      //   /dom(\\|\/)debug(\\|\/)by/,
+      //   helpers.root('config/empty.js')
+      // ),
+      // new NormalModuleReplacementPlugin(
+      //   /src(\\|\/)debug(\\|\/)debug_node/,
+      //   helpers.root('config/empty.js')
+      // ),
+      // new NormalModuleReplacementPlugin(
+      //   /src(\\|\/)debug(\\|\/)debug_renderer/,
+      //   helpers.root('config/empty.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,