blob: 8cceb9bb92a147387b9592450c62589d4d14ad64 [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/'),
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 },
115 plugins: DEV
116 ? [
117 new CleanWebpackPlugin(['dist'], { watch: false }),
118 new DefinePlugin({
119 DEBUG: DEV === true,
120 DEV: DEV === true
121 }),
122 new HotModuleReplacementPlugin()
123 ]
124 : [
125 new DefinePlugin({
126 DEBUG: DEV === true,
127 DEV: DEV === true
128 })
129 ]
130 };
131 if (DEV) {
132 webpackConfig.entry['punch-outs'].push('react-hot-loader/patch');
133 webpackConfig.entry['punch-outs'].push(
134 'webpack-dev-server/client?http://localhost:' + devPort
135 );
136 webpackConfig.entry['punch-outs'].push('webpack/hot/only-dev-server');
137 webpackConfig.devServer = {
138 port: devPort,
139 historyApiFallback: true,
140 publicPath: publicPath,
141 contentBase: path.join(__dirname, 'dist'),
142 inline: true,
143 hot: true,
144 stats: {
145 colors: true,
146 exclude: [path.join(__dirname, 'node_modules')]
147 },
148 before: proxyServer
149 };
150 }
151 console.log('Running build for : ' + argv.mode);
152 return webpackConfig;
153};