Create wt-odlux directory
[ccsdk/features.git] / sdnr / wt-odlux / odlux / framework / webpack.vendor.js
1 /**
2  * Webpack 4 configuration file
3  * see https://webpack.js.org/configuration/
4  * see https://webpack.js.org/configuration/dev-server/
5  */
6
7 "use strict";
8
9 const path = require("path");
10 const webpack = require("webpack");
11
12 const TerserPlugin = require('terser-webpack-plugin');
13 const ExtractTextPlugin = require('extract-text-webpack-plugin');
14 const extractCSS = new ExtractTextPlugin('vendor.css');
15
16 // const __dirname = (path => path.replace(/^([a-z]\:)/, c => c.toUpperCase()))(process.__dirname());
17
18 module.exports = (env) => {
19   const distPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");
20   const frameworkPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");
21   return [{
22     name: "Vendor",
23     mode: "none", //disable default behavior
24     target: "web",
25
26     context: path.resolve(__dirname, "src"),
27
28     entry: {
29       vendor: [
30         "@babel/polyfill",
31         "@fortawesome/fontawesome-svg-core",
32         "@fortawesome/free-solid-svg-icons",
33         "@fortawesome/react-fontawesome",
34         "jquery",
35         "react",
36         "react-dom",
37         "react-router-dom",
38         "@mui/material"
39       ]
40     },
41
42     devtool: env === "release" ? false : "source-map",
43
44     resolve: {
45       extensions: [".ts", ".tsx", ".js", ".jsx"]
46     },
47
48     output: {
49       path: distPath,
50       library: "[name]", // related to webpack.DllPlugin::name
51       libraryTarget: "umd2",
52       filename: "[name].js",
53       chunkFilename: "[name].js"
54     },
55
56     module: {
57       rules: [{
58         test: /\.tsx?$/,
59         exclude: /node_modules/,
60         use: [{
61           loader: "babel-loader"
62         }, {
63           loader: "ts-loader"
64         }]
65       },
66       {
67         test: /\.jsx?$/,
68         exclude: /node_modules/,
69         use: [{
70           loader: "babel-loader"
71         }]
72       },
73       {
74         test: /\.(png|woff|woff2|eot|ttf|svg)$/,
75         loader: 'url-loader?limit=100000&name=assets/[name].[ext]'
76       },  {
77         test: /\.json$/,
78         loader: 'json-loader'
79       },
80       ]
81     },
82
83     optimization: {
84       noEmitOnErrors: true,
85       namedModules: env !== "release",
86       minimize: env === "release",
87       minimizer: env !== "release" ? [] : [new TerserPlugin({
88         terserOptions: {
89           warnings: false, // false, true, "verbose"
90           compress: {
91             drop_console: true,
92             drop_debugger: true,
93           }
94         }
95       })],
96     },
97
98     plugins: [
99       extractCSS,
100       new webpack.DllPlugin({
101         context: path.resolve(__dirname, "src"),
102         name: "[name]",
103         path: path.resolve(distPath, "[name]-manifest.json")
104       }),
105       ...(env === "release" ? [
106         new webpack.DefinePlugin({
107           "process.env": {
108             NODE_ENV: "'production'",
109             VERSION: JSON.stringify(require("./package.json").version)
110           }
111         })
112       ] : [
113           new webpack.HotModuleReplacementPlugin(),
114           new webpack.DefinePlugin({
115             "process.env": {
116               NODE_ENV: "'development'",
117               VERSION: JSON.stringify(require("./package.json").version)
118             }
119           }),
120           new webpack.WatchIgnorePlugin([
121             /s?css\.d\.ts$/,
122             /less\.d\.ts$/
123           ])
124         ])
125     ]
126   }];
127 }