Merge "Improve device manager 1.4"
[ccsdk/features.git] / sdnr / wt / odlux / framework / webpack.config.js
1 /**\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : ccsdk feature sdnr wt odlux\r
4  * =================================================================================================\r
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.\r
6  * =================================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except\r
8  * in compliance with the License. You may obtain a copy of the License at\r
9  *\r
10  * http://www.apache.org/licenses/LICENSE-2.0\r
11  *\r
12  * Unless required by applicable law or agreed to in writing, software distributed under the License\r
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r
14  * or implied. See the License for the specific language governing permissions and limitations under\r
15  * the License.\r
16  * ============LICENSE_END==========================================================================\r
17  */\r
18 /**\r
19  * Webpack 4 configuration file\r
20  * see https://webpack.js.org/configuration/\r
21  * see https://webpack.js.org/configuration/dev-server/\r
22  */\r
23 \r
24 "use strict";\r
25 \r
26 const path = require("path");\r
27 const webpack = require("webpack");\r
28 const CopyWebpackPlugin = require("copy-webpack-plugin");\r
29 const requirejsPlugin = require('requirejs-webpack-plugin');\r
30 const TerserPlugin = require('terser-webpack-plugin');\r
31 \r
32 // const __dirname = (path => path.replace(/^([a-z]\:)/, c => c.toUpperCase()))(process.__dirname());\r
33 \r
34 module.exports = (env) => {\r
35   const distPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");\r
36   const frameworkPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");\r
37   return [{\r
38     name: "Client",\r
39     mode: "none", //disable default behavior\r
40     target: "web",\r
41 \r
42     context: path.resolve(__dirname, "src"),\r
43 \r
44     entry: {\r
45       app: [\r
46         "./app.tsx",\r
47         "./services",\r
48         "./components/objectDump",\r
49         "./components/material-table",\r
50         "./components/material-ui",\r
51         "./utilities/elasticSearch",\r
52         "./models"],\r
53     },\r
54 \r
55     devtool: env === "release" ? false : "source-map",\r
56 \r
57     resolve: {\r
58       extensions: [".ts", ".tsx", ".js", ".jsx"]\r
59     },\r
60 \r
61     output: {\r
62       path: distPath,\r
63       library: "[name]", // related to webpack.DllPlugin::name\r
64       libraryTarget: "umd2",\r
65       filename: "[name].js",\r
66       chunkFilename: "[name].js"\r
67     },\r
68 \r
69     module: {\r
70       rules: [{\r
71         test: /\.tsx?$/,\r
72         exclude: /node_modules/,\r
73         use: [{\r
74           loader: "babel-loader"\r
75         }, {\r
76           loader: "ts-loader"\r
77         }]\r
78       }, {\r
79         test: /\.jsx?$/,\r
80         exclude: /node_modules/,\r
81         use: [{\r
82           loader: "babel-loader"\r
83         }]\r
84       }, {\r
85         test: /\.(png|gif|jpg|svg)$/,\r
86         use: [{\r
87           loader: 'url-loader',\r
88           options: {\r
89             limit: 10000,\r
90             name: './images/[hash].[ext]'\r
91           }\r
92         }]\r
93       }]\r
94     },\r
95 \r
96     optimization: {\r
97       noEmitOnErrors: true,\r
98       namedModules: env !== "release",\r
99       minimize: env === "release",\r
100       minimizer: env !== "release" ? [] : [new TerserPlugin({\r
101         terserOptions: {\r
102           mangle: {\r
103             reserved: ["./app.tsx"]\r
104           },\r
105           warnings: false, // false, true, "verbose"\r
106           compress: {\r
107             drop_console: true,\r
108             drop_debugger: true,\r
109           }\r
110         }\r
111       })],\r
112     },\r
113 \r
114     plugins: [\r
115       new CopyWebpackPlugin([{\r
116         from: '../../node_modules/requirejs/require.js',\r
117         to: '.'\r
118       }, {\r
119         from: './favicon.ico',\r
120         to: '.'\r
121       }, {\r
122         from: env === "release" ? './index.html' : 'index.dev.html',\r
123         to: './index.html'\r
124       }]),\r
125       new requirejsPlugin({\r
126         path: distPath,\r
127         filename: 'config.js',\r
128         baseUrl: '',\r
129         pathUrl: '',\r
130         processOutput: function (assets) {\r
131           let mainConfig =  JSON.stringify(assets, null, 2);\r
132           mainConfig = mainConfig.slice(0,-1); // remove closing bracket from string\r
133           const entireConfig = mainConfig.concat(", waitSeconds: 30}"); // add waitSeconds to config\r
134           return 'require.config(' + entireConfig + ')';\r
135         }\r
136       }),\r
137       // new HtmlWebpackPlugin({\r
138       //   filename: "index.html",\r
139       //   template: "./index.html",\r
140       //   inject: "head"\r
141       // }),\r
142       // new HtmlWebpackIncludeAssetsPlugin({\r
143       //    assets: ['vendor.js'],\r
144       //    append: false\r
145       // }),\r
146       new webpack.DllReferencePlugin({\r
147         context: path.resolve(__dirname, "src"),\r
148         manifest: require(path.resolve(frameworkPath, "vendor-manifest.json")),\r
149         sourceType: "umd2"\r
150       }),\r
151       new webpack.DllPlugin({\r
152         context: path.resolve(__dirname, "src"),\r
153         name: "[name]",\r
154         path: path.resolve(distPath, "[name]-manifest.json")\r
155       }),\r
156       ...(env === "release") ? [\r
157         new webpack.DefinePlugin({\r
158           "process.env": {\r
159             NODE_ENV: "'production'",\r
160             VERSION: JSON.stringify(require("./package.json").version)\r
161           }\r
162         }),\r
163       ] : [\r
164           new webpack.HotModuleReplacementPlugin(),\r
165           new webpack.DefinePlugin({\r
166             "process.env": {\r
167               NODE_ENV: "'development'",\r
168               VERSION: JSON.stringify(require("./package.json").version)\r
169             }\r
170           }),\r
171           new webpack.WatchIgnorePlugin([\r
172             /css\.d\.ts$/,\r
173             /less\.d\.ts$/\r
174           ]),\r
175           new CopyWebpackPlugin([{\r
176             from: './assets/version.json',\r
177             to: './version.json'\r
178           }])\r
179         ]\r
180     ],\r
181 \r
182     devServer: {\r
183       public: "http://10.20.6.29:3100",\r
184       contentBase: distPath,\r
185 \r
186       compress: true,\r
187       headers: {\r
188         "Access-Control-Allow-Origin": "*"\r
189       },\r
190       host: "0.0.0.0",\r
191       port: 3100,\r
192       disableHostCheck: true,\r
193       historyApiFallback: true,\r
194       inline: true,\r
195       hot: false,\r
196       quiet: false,\r
197       stats: {\r
198         colors: true\r
199       },\r
200       proxy: {\r
201         "/oauth2/": {\r
202           target: "http://10.20.6.29:48181",\r
203           secure: false\r
204         },\r
205         "/database/": {\r
206           target: "http://10.20.6.29:48181",\r
207           secure: false\r
208         },\r
209         "/restconf/": {\r
210           target: "http://10.20.6.29:48181",\r
211           secure: false\r
212         },\r
213         "/help/": {\r
214           target: "http://10.20.6.29:48181",\r
215           secure: false\r
216         },\r
217         "/about": {\r
218           target: "http://10.20.6.29:48181",\r
219           secure: false\r
220         },\r
221         "/websocket": {\r
222           target: "http://10.20.6.29:48181",\r
223           ws: true,\r
224           changeOrigin: true,\r
225           secure: false\r
226         }\r
227       }\r
228     }\r
229 \r
230   }];\r
231 }\r
232 \r
233 \r