X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=openecomp-ui%2Fwebpack.config.js;h=be2e75efdb1323a3e376d36cc8124ffbaf3cb365;hb=59d0b40c4106065ac659981f5c7ba460e45b3dec;hp=c723a7a86c8abd0ea08c43ecebec8a9ff04b0135;hpb=7d92498efd0ea61097b241287c004965d46b2c12;p=sdc.git diff --git a/openecomp-ui/webpack.config.js b/openecomp-ui/webpack.config.js index c723a7a86c..be2e75efdb 100644 --- a/openecomp-ui/webpack.config.js +++ b/openecomp-ui/webpack.config.js @@ -1,66 +1,160 @@ 'use strict'; const path = require('path'); -const webpack = require('webpack'); +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 localDevConfig = {}; -try { - localDevConfig = require('./devConfig'); -} catch (e) {} -let devConfig = Object.assign({}, require('./devConfig.defaults'), localDevConfig); let devPort = process.env.PORT || devConfig.port; +let publicPath = 'http://localhost:' + devPort + '/onboarding/'; -let webpackCommon = require('./webpack.common'); +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 + '".'); + } -function getEntrySources(sources) { - for (let i in sources) { - if (sources.hasOwnProperty(i)) { - sources[i].push('webpack-dev-server/client?http://localhost:' + devPort); - sources[i].push('webpack/hot/only-dev-server'); - } - } - return sources; -} - -let webpackDevConfig = Object.assign({}, webpackCommon, { - entry: getEntrySources(devConfig.bundles), - devtool: 'eval-source-map', - output: { - path: path.join(__dirname, 'dist'), - publicPath: `http://localhost:${devPort}/onboarding/`, - filename: '[name].js' - }, - devServer: { - port: devPort, - historyApiFallback: true, - publicPath: `http://localhost:${devPort}/onboarding/`, - contentBase: path.join(__dirname, 'dist'), - hot: true, - inline: true, - stats: { - colors: true, - exclude: ['node_modules'] - }, - setup: proxyServer - }, - plugins: [ - new webpack.DefinePlugin({ - DEV: true, - DEBUG: true - }), - new webpack.HotModuleReplacementPlugin(), - new webpack.LoaderOptionsPlugin({ - options: { - eslint: { - configFile: './.eslintrc', - emitError: true, - emitWarning: true - }, - context: '/' - } - }) - ] -}); - -module.exports = webpackDevConfig; + 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, DEV ? '../dox-sequence-diagram-ui/' : '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; +};