blob: f3b410e54ead8855cd8b4d8ce5c05fe4e179e605 [file] [log] [blame]
'use strict';
const path = require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const { DefinePlugin, HotModuleReplacementPlugin } = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const devConfig = require('./tools/getDevConfig');
const proxyServer = require('./proxy-server');
const fs = require('fs');
let devPort = process.env.PORT || devConfig.port;
let publicPath = 'http://localhost:' + devPort + '/onboarding/';
module.exports = (env, argv) => {
let DEV = argv.mode && argv.mode === 'development';
let language = null;
if (
env === undefined ||
env.language === undefined ||
env.language === ''
) {
console.log('Setting language to default "en".');
language = 'en';
} else {
language = env.language;
console.log('Setting language to "' + env.language + '".');
}
var webpackConfig = {
entry: {
'punch-outs': ['sdc-app/punch-outs.js']
},
cache: true,
devtool: DEV ? 'eval-source-map' : undefined,
performance: { hints: false },
resolve: {
modules: [path.resolve('.'), path.join(__dirname, 'node_modules')],
alias: {
i18nJson: 'nfvo-utils/i18n/' + language + '.json',
'nfvo-utils': 'src/nfvo-utils',
'nfvo-components': 'src/nfvo-components',
'sdc-app': 'src/sdc-app',
// TODO - this is needed for heatValidation standalone. Can be deprecated down the line
'react-select/dist/': 'node_modules' + '/react-select/dist/'
}
},
output: {
path: path.join(__dirname, 'dist'),
publicPath: DEV ? publicPath : './',
filename: DEV ? '[name].js' : '[name]_' + language + '.js'
},
module: {
rules: [
{
enforce: 'pre',
test: /\.(js|jsx)$/,
include: path.resolve(__dirname, 'src'),
use: [{ loader: 'eslint-loader' }]
},
{
test: /\.(js|jsx)$/,
include: path.resolve(__dirname, 'src'),
use: [{ loader: 'babel-loader' }]
},
{
test: /\.(js|jsx)$/,
loader: 'source-map-loader',
include: path.resolve(__dirname, 'src'),
enforce: 'pre'
},
{
test: /\.(css|scss)$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader'
},
{
loader: 'sass-loader',
options: {
output: { path: path.join(__dirname, 'dist') }
}
}
],
include: [
/resources/,
path.join(
__dirname,
'node_modules/dox-sequence-diagram-ui/'
),
path.join(__dirname, 'node_modules/react-datepicker/'),
path.join(__dirname, 'node_modules/react-select/'),
path.join(__dirname, 'node_modules/onap-ui-common/'),
path.join(__dirname, 'node_modules/react-checkbox-tree/')
]
},
{
test: /\.(svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 16384,
mimetype: 'image/svg+xml'
},
include: [
path.join(
__dirname,
'node_modules/dox-sequence-diagram-ui/'
),
path.join(__dirname, 'node_modules/onap-ui-common/')
]
},
{
test: /\.worker\.js$/,
use: { loader: 'worker-loader' }
}
]
},
plugins: DEV
? [
new CleanWebpackPlugin(['dist'], { watch: false }),
new DefinePlugin({
DEBUG: DEV === true,
DEV: DEV === true
}),
new HotModuleReplacementPlugin()
]
: [
new DefinePlugin({
DEBUG: DEV === true,
DEV: DEV === true
}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: __dirname + '/src/index.html'
})
]
};
if (DEV) {
webpackConfig.output.globalObject = 'this';
webpackConfig.entry['punch-outs'].push('react-hot-loader/patch');
webpackConfig.entry['punch-outs'].push(
'webpack-dev-server/client?http://localhost:' + devPort
);
webpackConfig.entry['punch-outs'].push('webpack/hot/only-dev-server');
webpackConfig.devServer = {
port: devPort,
historyApiFallback: true,
publicPath: publicPath,
contentBase: path.join(__dirname, 'dist'),
inline: true,
hot: true,
stats: {
colors: true,
exclude: [path.join(__dirname, 'node_modules')]
},
before: proxyServer
};
}
console.log('Running build for : ' + argv.mode);
return webpackConfig;
};