-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
'use strict';
-var path = require('path');
-var webpack = require('webpack');
-
-var localDevConfig = {};
-try {
- localDevConfig = require('./devConfig');
-} catch(e) {}
-var devConfig = Object.assign({}, require('./devConfig.defaults'), localDevConfig);
-var devPort = process.env.PORT || devConfig.port;
-var latestProgress = 0;
-
-module.exports = {
- devtool: 'eval-source-map',
- entry: {
- bundle: [
- 'sdc-app/sdc.app.jsx',
- `webpack-dev-server/client?http://localhost:${devPort}`,
- 'webpack/hot/only-dev-server'
- ],
- 'punch-outs': [
- 'sdc-app/punch-outs.js',
- `webpack-dev-server/client?http://localhost:${devPort}`,
- 'webpack/hot/only-dev-server'
- ],
- 'heat-validation': [
- 'sdc-app/heatValidation.app.jsx',
- `webpack-dev-server/client?http://localhost:${devPort}`,
- 'webpack/hot/only-dev-server'
- ]
- },
- resolve: {
- root: [path.resolve('.')],
- alias: {
- i18nJson: 'nfvo-utils/i18n/locale.json',
- 'nfvo-utils': 'src/nfvo-utils',
- 'nfvo-components': 'src/nfvo-components',
- 'sdc-app': 'src/sdc-app'
- }
- },
- output: {
- path: path.join(__dirname, 'dist/dev'),
- publicPath: `http://localhost:${devPort}/onboarding/`,
- filename: '[name].js'
- },
- devServer: {
- port: devPort,
- historyApiFallback: true,
- publicPath: `http://localhost:${devPort}/onboarding/`,
- contentBase: path.join(__dirname, 'dist/dev'),
- hot: true,
- progress: true,
- inline: true,
- debug: true,
- stats: {
- colors: true
- }
- },
- module: {
- preLoaders: [
- {test: /\.(js|jsx)$/, loader: 'source-map-loader', exclude: /node_modules/}
- ],
- loaders: [
- {test: /\.(js|jsx)$/, loaders: ['react-hot', 'babel-loader', 'eslint-loader'], exclude: /node_modules/},
- {test: /\.(css|scss)$/, loaders: ['style', 'css?sourceMap', 'sass?sourceMap']},
+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');
- // required for font icons
- {test: /\.(woff|woff2)(\?.*)?$/, loader: 'url-loader?limit=16384&mimetype=application/font-woff' },
- {test: /\.(ttf|eot|otf)(\?.*)?$/, loader: 'file-loader' },
- {test: /\.(png|jpg|svg)(\?.*)?$/, loader: 'url-loader?limit=16384'},
+const devPort = process.env.PORT || devConfig.port;
+const publicPath = 'http://localhost:' + devPort + '/onboarding/';
- {test: /\.json$/, loaders: ['json']},
- {test: /\.html$/, loaders: ['html']}
- ]
- },
- eslint: {
- configFile: './.eslintrc',
- emitError: true,
- emitWarning: true
- },
- plugins: [
- new webpack.DefinePlugin({
- DEV: true,
- DEBUG: true
- }),
- new webpack.HotModuleReplacementPlugin(),
- new webpack.ProgressPlugin(function (percentage, msg) {
- if (percentage == 0) {
- latestProgress = 0;
- console.log(); //new line
- }
- var progressVal = (percentage * 100).toFixed(0);
- if (progressVal > latestProgress) {
- latestProgress = progressVal
- //process.stdout.clearLine();
- process.stdout.write(msg + ' ' + progressVal + '%\r');
- }
- })
- ]
+module.exports = (env, argv) => {
+ const IS_DEV = argv.mode && argv.mode === 'development';
+ let language;
+ 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 + '".');
+ }
+ const webpackConfig = {
+ entry: {
+ 'punch-outs': ['sdc-app/punch-outs.js']
+ },
+ cache: true,
+ devtool: IS_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: IS_DEV ? publicPath : './',
+ filename: IS_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, IS_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: IS_DEV
+ ? [
+ new CleanWebpackPlugin(['dist'], { watch: false }),
+ new DefinePlugin({
+ DEBUG: true,
+ DEV: true
+ }),
+ new HotModuleReplacementPlugin()
+ ]
+ : [
+ new DefinePlugin({
+ DEBUG: false,
+ DEV: false,
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'index.html',
+ template: __dirname + '/src/index.html'
+ })
+ ]
+ };
+ if (IS_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;
};