var path = require('path');
var PATHS = {
- SRC: path.resolve(__dirname, 'src/main/webapp'),
- TARGET: path.resolve(__dirname, 'dist')
+ SRC: path.resolve(__dirname, 'src/main/webapp'),
+ TARGET: path.resolve(__dirname, 'dist')
};
-var devmode = (process.env.npm_lifecycle_event === 'start');
+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')
+ );
+ }
-var entry = [];
-if (devmode) {
- entry.push('babel-polyfill');
- 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: '/'
+ }
+ })
+ ]
+ };
-var config = {
- entry: entry,
- output: {
- path: PATHS.TARGET,
- filename: 'index.js',
- libraryTarget: 'umd'
- },
- resolve: {
- extensions: ['', '.js', '.jsx']
- },
- eslint: {
- failOnWarning: false,
- failOnError: false,
- configFile: 'eslintrc.json'
- },
- devtool: 'eval-source-map',
- module: {
- preLoaders: [{
- test: /\.(js|jsx)?$/,
- loader: 'eslint-loader',
- exclude: /node_modules/
- }],
- loaders: [{
- test: /\.(js|jsx)$/,
- include: path.join(PATHS.SRC, 'lib'),
- loader: 'babel-loader',
- exclude: /node_modules/,
- query: {
- presets: ['es2015', 'react']
- }
- }, {
- test: /\.css$/,
- loaders: ['style', 'css']
- }, {
- test: /\.(png|woff|woff2|eot|ttf|otf)$/,
- loader: 'url-loader?limit=100000'
- }, {
- test: /\.scss$/,
- include: path.join(PATHS.SRC, 'res'),
- loaders: ['style', 'css', 'sass']
- }, {
- test: /\.html$/,
- include: path.join(PATHS.SRC, 'lib'),
- loaders: ['raw']
- }, {
- test: /\.json$/,
- include: path.join(PATHS.SRC, 'lib'),
- loaders: ['json']
- }, {
- test: /\.svg$/,
- loader: 'svg-sprite?' + JSON.stringify({
- name: '[name]_[hash]',
- prefixize: true
- })
- }]
- },
- externals: (devmode ? {} : {
- 'd3': 'd3',
- 'lodash': 'lodash',
- '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'
- }),
- devServer: {
- port: 4096,
- quiet: false,
- contentBase: 'src/main/webapp',
- proxy: {
- '/services/*': {
- target: 'http://localhost:38080/asdc-sequencer',
- secure: false
- }
- }
- }
+ return config;
};
-
-module.exports = config;