2 * Webpack 4 configuration file
3 * see https://webpack.js.org/configuration/
4 * see https://webpack.js.org/configuration/dev-server/
9 const path = require("path");
10 const webpack = require("webpack");
12 const TerserPlugin = require('terser-webpack-plugin');
13 const ExtractTextPlugin = require('extract-text-webpack-plugin');
14 const extractCSS = new ExtractTextPlugin('vendor.css');
16 // const __dirname = (path => path.replace(/^([a-z]\:)/, c => c.toUpperCase()))(process.__dirname());
18 module.exports = (env) => {
19 const distPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");
20 const frameworkPath = path.resolve(__dirname, env === "release" ? "." : "..", "dist");
23 mode: "none", //disable default behavior
26 context: path.resolve(__dirname, "src"),
31 "@fortawesome/fontawesome-svg-core",
32 "@fortawesome/free-solid-svg-icons",
33 "@fortawesome/react-fontawesome",
42 devtool: env === "release" ? false : "source-map",
45 extensions: [".ts", ".tsx", ".js", ".jsx"]
50 library: "[name]", // related to webpack.DllPlugin::name
51 libraryTarget: "umd2",
52 filename: "[name].js",
53 chunkFilename: "[name].js"
59 exclude: /node_modules/,
61 loader: "babel-loader"
68 exclude: /node_modules/,
70 loader: "babel-loader"
74 test: /\.(png|woff|woff2|eot|ttf|svg)$/,
75 loader: 'url-loader?limit=100000&name=assets/[name].[ext]'
78 loader: extractCSS.extract(['css-loader?minimize', 'sass-loader'])
88 namedModules: env !== "release",
89 minimize: env === "release",
90 minimizer: env !== "release" ? [] : [new TerserPlugin({
92 warnings: false, // false, true, "verbose"
103 new webpack.DllPlugin({
104 context: path.resolve(__dirname, "src"),
106 path: path.resolve(distPath, "[name]-manifest.json")
108 ...(env === "release") ? [
109 new webpack.DefinePlugin({
111 NODE_ENV: "'production'",
112 VERSION: JSON.stringify(require("./package.json").version)
116 new webpack.HotModuleReplacementPlugin(),
117 new webpack.DefinePlugin({
119 NODE_ENV: "'development'",
120 VERSION: JSON.stringify(require("./package.json").version)
123 new webpack.WatchIgnorePlugin([