diff --git a/package.json b/package.json index c18a792..ead68f3 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "scripts": { "start": "npx webpack --config webpack.config.js", - "build": "NODE_ENV=production npx webpack --config webpack.config.js", + "build": "npx webpack --mode=production --config webpack.config.js", "dev": "npx webpack --config webpack.config.js --watch", "postinstall": "node -e \"const { execSync } = require('child_process'); try { execSync('coc --version', { stdio: 'ignore' }); } catch (error) { try { execSync('npm install -g @cocreate/cli', { stdio: 'inherit' }); console.log('Installed \"@cocreate/cli\" globally.'); } catch (error) { console.error('Failed to install \"@cocreate/cli\" globally:', error); } }\"" }, diff --git a/webpack.config.js b/webpack.config.js index c6b224f..a3ca4d7 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-modal": "./src/index.js", - }, - output: { - path: path.resolve(__dirname, "dist"), - filename: isProduction ? "[name].min.js" : "[name].js", - libraryTarget: "umd", - libraryExport: "default", - library: ["CoCreate", "modal"], - 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-modal": "./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", "modal"], + 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