Add worker to onboard notification
[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                     ]
97                 },
98                 {
99                     test: /\.(svg)(\?.*)?$/,
100                     loader: 'url-loader',
101                     options: {
102                         limit: 16384,
103                         mimetype: 'image/svg+xml'
104                     },
105                     include: [
106                         path.join(
107                             __dirname,
108                             'node_modules/dox-sequence-diagram-ui/'
109                         ),
110                         path.join(__dirname, 'node_modules/sdc-ui/')
111                     ]
112                 },
113                 {
114                     test: /\.worker\.js$/,
115                     use: { loader: 'worker-loader' }
116                 }
117             ]
118         },
119         plugins: DEV
120             ? [
121                   new CleanWebpackPlugin(['dist'], { watch: false }),
122                   new DefinePlugin({
123                       DEBUG: DEV === true,
124                       DEV: DEV === true
125                   }),
126                   new HotModuleReplacementPlugin()
127               ]
128             : [
129                   new DefinePlugin({
130                       DEBUG: DEV === true,
131                       DEV: DEV === true
132                   })
133               ]
134     };
135     if (DEV) {
136         webpackConfig.output.globalObject = 'this';
137         webpackConfig.entry['punch-outs'].push('react-hot-loader/patch');
138         webpackConfig.entry['punch-outs'].push(
139             'webpack-dev-server/client?http://localhost:' + devPort
140         );
141         webpackConfig.entry['punch-outs'].push('webpack/hot/only-dev-server');
142         webpackConfig.devServer = {
143             port: devPort,
144             historyApiFallback: true,
145             publicPath: publicPath,
146             contentBase: path.join(__dirname, 'dist'),
147             inline: true,
148             hot: true,
149             stats: {
150                 colors: true,
151                 exclude: [path.join(__dirname, 'node_modules')]
152             },
153             before: proxyServer
154         };
155     }
156     console.log('Running build for : ' + argv.mode);
157     return webpackConfig;
158 };