X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fconfig%2Fwebpack.prod.js;h=6d65fcb3739ff3305b9f9358db534dbe7b3f9c86;hb=efbf0ed7f2a5d01fbcacc26dae1ff254c46b0ce5;hp=46db5448216381cc24c09b7b053797d0b7daadee;hpb=ad22074a780b4bdbe3cd9e903b3fa5ef83eaef14;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/config/webpack.prod.js b/client/config/webpack.prod.js index 46db54482..6d65fcb37 100644 --- a/client/config/webpack.prod.js +++ b/client/config/webpack.prod.js @@ -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,