List of Input Parameters for VSP: FE
[sdc.git] / openecomp-ui / webpack.config.js
1 'use strict';
2
3 const path = require('path');
4 const CleanWebpackPlugin = require('clean-webpack-plugin');
5 const { DefinePlugin, HotModuleReplacementPlugin } = require('webpack');
6
7 const devConfig = require('./tools/getDevConfig');
8 const proxyServer = require('./proxy-server');
9 const fs = require('fs');
10
11 let devPort = process.env.PORT || devConfig.port;
12 let publicPath = 'http://localhost:' + devPort + '/onboarding/';
13
14 module.exports = (env, argv) => {
15     let DEV = argv.mode && argv.mode === 'development';
16     let language = null;
17     if (
18         env === undefined ||
19         env.language === undefined ||
20         env.language === ''
21     ) {
22         console.log('Setting language to default "en".');
23         language = 'en';
24     } else {
25         language = env.language;
26         console.log('Setting language to  "' + env.language + '".');
27     }
28
29     var webpackConfig = {
30         entry: {
31             'punch-outs': ['sdc-app/punch-outs.js']
32         },
33         cache: true,
34         devtool: DEV ? 'eval-source-map' : undefined,
35         performance: { hints: false },
36         resolve: {
37             modules: [path.resolve('.'), path.join(__dirname, 'node_modules')],
38             alias: {
39                 i18nJson: 'nfvo-utils/i18n/' + language + '.json',
40                 'nfvo-utils': 'src/nfvo-utils',
41                 'nfvo-components': 'src/nfvo-components',
42                 'sdc-app': 'src/sdc-app',
43                 // TODO - this is needed for heatValidation standalone. Can be deprecated down the line
44                 'react-select/dist/': 'node_modules' + '/react-select/dist/'
45             }
46         },
47         output: {
48             path: path.join(__dirname, 'dist'),
49             publicPath: DEV ? publicPath : '/onboarding/',
50             filename: DEV ? '[name].js' : '[name]_' + language + '.js'
51         },
52         module: {
53             rules: [
54                 {
55                     enforce: 'pre',
56                     test: /\.(js|jsx)$/,
57                     include: path.resolve(__dirname, 'src'),
58                     use: [{ loader: 'eslint-loader' }]
59                 },
60                 {
61                     test: /\.(js|jsx)$/,
62                     include: path.resolve(__dirname, 'src'),
63                     use: [{ loader: 'babel-loader' }]
64                 },
65                 {
66                     test: /\.(js|jsx)$/,
67                     loader: 'source-map-loader',
68                     include: path.resolve(__dirname, 'src'),
69                     enforce: 'pre'
70                 },
71                 {
72                     test: /\.(css|scss)$/,
73                     use: [
74                         {
75                             loader: 'style-loader'
76                         },
77                         {
78                             loader: 'css-loader'
79                         },
80                         {
81                             loader: 'sass-loader',
82                             options: {
83                                 output: { path: path.join(__dirname, 'dist') }
84                             }
85                         }
86                     ],
87                     include: [
88                         /resources/,
89                         path.join(
90                             __dirname,
91                             'node_modules/dox-sequence-diagram-ui/'
92                         ),
93                         path.join(__dirname, 'node_modules/react-datepicker/'),
94                         path.join(__dirname, 'node_modules/react-select/'),
95                         path.join(__dirname, 'node_modules/sdc-ui/'),
96                         path.join(__dirname, 'node_modules/react-checkbox-tree/')
97                     ]
98                 },
99                 {
100                     test: /\.(svg)(\?.*)?$/,
101                     loader: 'url-loader',
102                     options: {
103                         limit: 16384,
104                         mimetype: 'image/svg+xml'
105                     },
106                     include: [
107                         path.join(
108                             __dirname,
109                             'node_modules/dox-sequence-diagram-ui/'
110                         ),
111                         path.join(__dirname, 'node_modules/sdc-ui/')
112                     ]
113                 },
114                 {
115                     test: /\.worker\.js$/,
116                     use: { loader: 'worker-loader' }
117                 }
118             ]
119         },
120         plugins: DEV
121             ? [
122                   new CleanWebpackPlugin(['dist'], { watch: false }),
123                   new DefinePlugin({
124                       DEBUG: DEV === true,
125                       DEV: DEV === true
126                   }),
127                   new HotModuleReplacementPlugin()
128               ]
129             : [
130                   new DefinePlugin({
131                       DEBUG: DEV === true,
132                       DEV: DEV === true
133                   })
134               ]
135     };
136     if (DEV) {
137         webpackConfig.output.globalObject = 'this';
138         webpackConfig.entry['punch-outs'].push('react-hot-loader/patch');
139         webpackConfig.entry['punch-outs'].push(
140             'webpack-dev-server/client?http://localhost:' + devPort
141         );
142         webpackConfig.entry['punch-outs'].push('webpack/hot/only-dev-server');
143         webpackConfig.devServer = {
144             port: devPort,
145             historyApiFallback: true,
146             publicPath: publicPath,
147             contentBase: path.join(__dirname, 'dist'),
148             inline: true,
149             hot: true,
150             stats: {
151                 colors: true,
152                 exclude: [path.join(__dirname, 'node_modules')]
153             },
154             before: proxyServer
155         };
156     }
157     console.log('Running build for : ' + argv.mode);
158     return webpackConfig;
159 };