UNPKG

@holisticon/angularjs-common

Version:

Common angular build module for AngularJS 1.x

185 lines (165 loc) 5.53 kB
/** * @author: @mreinhardt */ const helpers = require('./helpers'); const util = require('util'); const debugLog = util.debuglog('@holisticon/angularjs-common/webpack.prod'); const webpack = require('webpack'); const webpackMerge = require('webpack-merge'); // used to merge webpack configs const commonConfig = require('./webpack.common.js'); // the settings that are common to prod and dev const appConfig = helpers.getAppConfig(); /** * Webpack Plugins */ const ProvidePlugin = require('webpack/lib/ProvidePlugin'); const DefinePlugin = require('webpack/lib/DefinePlugin'); const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin'); const IgnorePlugin = require('webpack/lib/IgnorePlugin'); const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin'); const WebpackMd5Hash = require('webpack-md5-hash'); /** * Webpack Constants */ const ENV = process.env.ENV || process.env.NODE_ENV || 'production'; const HOST = process.env.HOST || 'localhost'; const PORT = process.env.PORT || 8080; const METADATA = webpackMerge(commonConfig.metadata, { host: HOST, port: PORT, ENV: ENV, HMR: false }); var config = webpackMerge(commonConfig, { /** * 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 */ output: { /** * The output directory as absolute path (required). * * See: http://webpack.github.io/docs/configuration.html#output-path */ path: appConfig.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 */ 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 */ 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' }, /** * Add additional plugins to the compiler. * * See: http://webpack.github.io/docs/configuration.html#plugins */ plugins: [ /* * Plugin: OccurenceOrderPlugin * Description: Varies the distribution of the ids to get the smallest id length * for often used ids. * * See: https://webpack.github.io/docs/list-of-plugins.html#occurrenceorderplugin * See: https://github.com/webpack/docs/wiki/optimization#minimize */ new webpack.optimize.OccurrenceOrderPlugin(true), /* * Plugin: CommonsChunkPlugin * Description: Shares common code between the pages. * It identifies common modules and put them into a commons chunk. * * See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app */ new webpack.optimize.CommonsChunkPlugin(appConfig.chunks), /** * Plugin: WebpackMd5Hash * Description: Plugin to replace a standard webpack chunkhash with md5. * * See: https://www.npmjs.com/package/webpack-md5-hash */ new WebpackMd5Hash(), /** * Plugin: DefinePlugin * Description: Define free variables. * Useful for having development builds with debug logging or adding global constants. * * Environment helpers * * See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin */ // NOTE: when adding more properties make sure you include them in custom-typings.d.ts new DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), metadata: METADATA }), /** * 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 //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 sourceMap: false, //prod beautify: false, //prod mangle: false, //prod compress: { screw_ie8: true }, //prod comments: false //prod }) ], /* * Include polyfills or mocks for various node stuff * Description: Node configuration * * See: https://webpack.github.io/docs/configuration.html#node */ node: { crypto: 'empty', process: true, module: false, clearImmediate: false, setImmediate: false } }); debugLog('Using following webpack prod config:', config); module.exports = config;