From bb6d483f062a1220417b4ed178db1d13e56740ad Mon Sep 17 00:00:00 2001 From: frankpagan Date: Wed, 16 Aug 2023 16:30:23 -0600 Subject: [PATCH] fix: webpack.config and package.json make use of mode=production instead of process.env --- webpack.config.js | 152 ++++++++++++++++++++++++---------------------- 1 file changed, 79 insertions(+), 73 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 956e035..e9ba6b0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,84 +1,90 @@ const path = require("path") const TerserPlugin = require("terser-webpack-plugin") const MiniCssExtractPlugin = require("mini-css-extract-plugin") -let isProduction = process.env.NODE_ENV === "production" const { CleanWebpackPlugin } = require("clean-webpack-plugin") -module.exports = { - entry: { - "CoCreate-cli": "./src/index.js", - }, - output: { - path: path.resolve(__dirname, "dist"), - filename: isProduction ? "[name].min.js" : "[name].js", - libraryTarget: "umd", - libraryExport: "default", - library: ["CoCreate", "cli"], - globalObject: "this", - }, +module.exports = (env, argv) => { + let isProduction = false + if (argv.mode === 'production') + isProduction = true - plugins: [ - new CleanWebpackPlugin(), - new MiniCssExtractPlugin({ - filename: "[name].css", - }), - ], - // Default mode for Webpack is production. - // Depending on mode Webpack will apply different things - // on final bundle. For now we don't need production's JavaScript - // minifying and other thing so let's set mode to development - mode: isProduction ? "production" : "development", - module: { - rules: [ - { - test: /.js$/, - exclude: /(node_modules)/, - use: { - loader: "babel-loader", - options: { - plugins: ["@babel/plugin-transform-modules-commonjs"], - }, + const config = { + entry: { + "CoCreate-cli": "./src/index.js", }, - }, - { - test: /.css$/i, - use: [ - { loader: "style-loader", options: { injectType: "linkTag" } }, - "file-loader", + output: { + path: path.resolve(__dirname, "dist"), + filename: isProduction ? "[name].min.js" : "[name].js", + libraryTarget: "umd", + libraryExport: "default", + library: ["CoCreate", "cli"], + globalObject: "this", + }, + + plugins: [ + new CleanWebpackPlugin(), + new MiniCssExtractPlugin({ + filename: "[name].css", + }), ], - }, - ], - }, + // Default mode for Webpack is production. + // Depending on mode Webpack will apply different things + // on final bundle. For now we don't need production's JavaScript + // minifying and other thing so let's set mode to development + mode: isProduction ? "production" : "development", + module: { + rules: [ + { + test: /.js$/, + exclude: /(node_modules)/, + use: { + loader: "babel-loader", + options: { + plugins: ["@babel/plugin-transform-modules-commonjs"], + }, + }, + }, + { + test: /.css$/i, + use: [ + { loader: "style-loader", options: { injectType: "linkTag" } }, + "file-loader", + ], + }, + ], + }, - // add source map - ...(isProduction ? {} : { devtool: "eval-source-map" }), + // add source map + ...(isProduction ? {} : { devtool: "eval-source-map" }), - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - extractComments: true, - // cache: true, - parallel: true, - // sourceMap: true, // Must be set to true if using source-maps in production - terserOptions: { - // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions - // extractComments: 'all', - compress: { - drop_console: true, - }, - }, - }), - ], - splitChunks: { - chunks: "all", - minSize: 200, - // maxSize: 99999, - //minChunks: 1, + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + extractComments: true, + // cache: true, + parallel: true, + // sourceMap: true, // Must be set to true if using source-maps in production + terserOptions: { + // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions + // extractComments: 'all', + compress: { + drop_console: true, + }, + }, + }), + ], + splitChunks: { + chunks: "all", + minSize: 200, + // maxSize: 99999, + //minChunks: 1, - cacheGroups: { - defaultVendors: false, - }, - }, - }, -} + cacheGroups: { + defaultVendors: false, + }, + }, + }, + } + return config +} \ No newline at end of file