var path = require ('path'); var webpack = require ('webpack'); var AssetsWebpackPlugin = require ('assets-webpack-plugin'); var WebpackChunkHash = require ('webpack-chunk-hash'); var merge = require ('webpack-merge'); var wpConfig = require ('./webpack.config.json'); var devMode = process.env.NODE_ENV !== 'production'; var outputPath = path.join (__dirname, wpConfig.buildDir); var publicPath = wpConfig.buildDir +'/'; var baseConfig = { entry: wpConfig.entry, output: { path: outputPath, publicPath: publicPath, filename: '[name].js', chunkFilename: 'chunk.[id].js' }, module: { rules: [ { test: /\.css$/, loader: 'style-loader!css-loader' }, { test: /\.xml$/, loader: 'raw-loader' }, { test: /\.ttf$/, loader: 'file-loader' } ] }, resolve: { modules: [ __dirname +'/js', __dirname, 'node_modules', '/usr/lib/node_modules' ] }, plugins: [ new webpack.DefinePlugin ({ _DEV_MODE: devMode, _DEV_SERVER_PORT: wpConfig.devServerPort, _PUBLIC_PATH: JSON.stringify (publicPath) }), new webpack.optimize.CommonsChunkPlugin ({ names: ['vendor', 'manifest'] }) ] }; var prodConfig = { output: { filename: '[name].[chunkhash].js', chunkFilename: 'chunk.[id].[chunkhash].js' }, plugins: [ new webpack.optimize.UglifyJsPlugin ({ minimize: true, compress: { warnings: false } }), new AssetsWebpackPlugin ({ path: outputPath }), new webpack.HashedModuleIdsPlugin (), new WebpackChunkHash () ], devtool: 'source-map' }; var devConfig = { plugins: [ new webpack.NamedModulesPlugin () ], devServer: { host: '0.0.0.0', port: wpConfig.devServerPort, headers: { "Access-Control-Allow-Origin": "*" }, stats: { chunks: false } }, devtool: 'eval-source-map' }; var mrgConfig = devMode ? devConfig : prodConfig; module.exports = merge (baseConfig, mrgConfig);