var webpack = require('webpack'); var path = require('path'); var PATHS = { SRC: path.resolve(__dirname, 'src/main/webapp'), TARGET: path.resolve(__dirname, 'dist') }; module.exports = (env, argv) => { let devmode = argv.mode && argv.mode === 'development'; let entry = []; if (devmode) { entry.push(path.resolve(PATHS.SRC, 'lib/main.jsx')); } else { entry.push( path.resolve(PATHS.SRC, 'lib/ecomp/asdc/sequencer/Sequencer.jsx') ); } let config = { entry: entry, performance: { hints: false }, output: { path: PATHS.TARGET, filename: 'index.js', libraryTarget: 'umd' }, resolve: { extensions: ['.js', '.jsx'] }, devtool: 'eval-source-map', module: { rules: [ { test: /\.(js|jsx)$/, loader: 'eslint-loader', include: [/src/], enforce: 'pre' }, { test: /\.(js|jsx)$/, loader: 'babel-loader', include: path.join(PATHS.SRC, 'lib') }, { test: /\.(css)$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' }] }, { test: /\.(png|woff|woff2|eot|ttf|otf)$/, loader: 'url-loader?limit=100000' }, { test: /\.scss$/, include: path.join(PATHS.SRC, 'res'), loaders: ['style-loader', 'css-loader', 'sass-loader'] }, { test: /\.html$/, include: path.join(PATHS.SRC, 'lib'), loaders: ['raw-loader'] }, { test: /\.svg$/, loader: 'svg-sprite-loader', options: { symbolId: '[name]_[hash]', extract: false } } ] }, externals: devmode ? {} : { 'd3-zoom': 'd3-zoom', 'd3-selection': 'd3-selection', 'lodash/merge': 'lodash/merge', 'lodash/template': 'lodash/template', react: 'react', 'react-dnd': 'react-dnd', 'react-dnd-html5-backend': 'react-dnd-html5-backend', 'react-dom': 'react-dom', 'react-redux': 'react-redux', 'react-select': 'react-select', redux: 'redux', 'prop-types': 'prop-types' }, devServer: { port: 4096, quiet: false, contentBase: 'src/main/webapp', proxy: { '/services/*': { target: 'http://localhost:38080/asdc-sequencer', secure: false } } }, plugins: devmode ? [ new webpack.DefinePlugin({ DEBUG: devmode === true, DEV: devmode === true }), new webpack.HotModuleReplacementPlugin(), new webpack.LoaderOptionsPlugin({ options: { eslint: { failOnWarning: false, failOnError: false, configFile: 'eslintrc.json' }, context: '/' } }) ] : [ new webpack.DefinePlugin({ DEBUG: devmode === true, DEV: devmode === true }), new webpack.LoaderOptionsPlugin({ options: { eslint: { failOnWarning: false, failOnError: false, configFile: 'eslintrc.json' }, context: '/' } }) ] }; return config; };