blob: 2e8731e27107fa58e8698963c807d51379f7bead [file] [log] [blame]
Michael Landoefa037d2017-02-19 12:57:33 +02001'use strict';
2
AviZi280f8012017-06-09 02:39:56 +03003const path = require('path');
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +03004const CleanWebpackPlugin = require('clean-webpack-plugin');
5const { DefinePlugin, HotModuleReplacementPlugin } = require('webpack');
6
7const devConfig = require('./tools/getDevConfig');
AviZi280f8012017-06-09 02:39:56 +03008const proxyServer = require('./proxy-server');
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +03009const fs = require('fs');
Michael Landoefa037d2017-02-19 12:57:33 +020010
AviZi280f8012017-06-09 02:39:56 +030011let devPort = process.env.PORT || devConfig.port;
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +030012let publicPath = 'http://localhost:' + devPort + '/onboarding/';
Michael Landoefa037d2017-02-19 12:57:33 +020013
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +030014module.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 }
AviZi280f8012017-06-09 02:39:56 +030028
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +030029 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/'),
Vodafone804ec682019-03-18 15:46:53 +053095 path.join(__dirname, 'node_modules/sdc-ui/'),
96 path.join(__dirname, 'node_modules/react-checkbox-tree/')
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +030097 ]
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 ]
Maleke6c3c722018-10-16 16:44:41 +0300113 },
114 {
115 test: /\.worker\.js$/,
116 use: { loader: 'worker-loader' }
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +0300117 }
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) {
Maleke6c3c722018-10-16 16:44:41 +0300137 webpackConfig.output.globalObject = 'this';
Einav Weiss Keidarf2c47232018-05-30 18:12:02 +0300138 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};