X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=openecomp-ui%2Fwebpack.config.js;h=be2e75efdb1323a3e376d36cc8124ffbaf3cb365;hb=0e35ad02b22bd49c01df57adbe1ea1ce995f823c;hp=2cccba8f0ff5cc0b492a93ac96134015bec25595;hpb=efa037d34be7b1570efdc767c79fad8d4005f10e;p=sdc.git diff --git a/openecomp-ui/webpack.config.js b/openecomp-ui/webpack.config.js index 2cccba8f0f..be2e75efdb 100644 --- a/openecomp-ui/webpack.config.js +++ b/openecomp-ui/webpack.config.js @@ -1,122 +1,160 @@ -/*- - * ============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'); +const fs = require('fs'); - // 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'}, +let devPort = process.env.PORT || devConfig.port; +let 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) => { + 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, 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; };