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]'
85 namedModules: env !== "release",
86 minimize: env === "release",
87 minimizer: env !== "release" ? [] : [new TerserPlugin({
89 warnings: false, // false, true, "verbose"
100 new webpack.DllPlugin({
101 context: path.resolve(__dirname, "src"),
103 path: path.resolve(distPath, "[name]-manifest.json")
105 ...(env === "release" ? [
106 new webpack.DefinePlugin({
108 NODE_ENV: "'production'",
109 VERSION: JSON.stringify(require("./package.json").version)
113 new webpack.HotModuleReplacementPlugin(),
114 new webpack.DefinePlugin({
116 NODE_ENV: "'development'",
117 VERSION: JSON.stringify(require("./package.json").version)
120 new webpack.WatchIgnorePlugin([