From 82fc103a3e595a69c17784ef1d7f734db6ea1692 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Sat, 23 Oct 2021 09:06:59 -0500 Subject: [PATCH] chore: webpack config --- .eslintrc | 2 +- package.json | 6 +++--- webpack-defaults.js | 13 +++++++++++++ webpack.config.js | 7 ++----- webpack.dev.js | 8 +++----- webpack.prod.js | 8 +++----- 6 files changed, 25 insertions(+), 19 deletions(-) create mode 100644 webpack-defaults.js diff --git a/.eslintrc b/.eslintrc index 136afdb25..82a099e75 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,7 +11,7 @@ "parserOptions": { "project": "./app/assets/javascripts/tsconfig.json" }, - "ignorePatterns": [".eslintrc.js", "webpack.*.js"], + "ignorePatterns": [".eslintrc.js", "webpack.*.js", "webpack-defaults.js"], "rules": { "standard/no-callback-literal": 0, // Disable this as we have too many callbacks relying on literals "no-throw-literal": 0, diff --git a/package.json b/package.json index b4520475b..a0838b0a6 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,10 @@ "setup": "yarn install", "start": "webpack-dev-server --config webpack.dev.js", "watch": "webpack -w --config webpack.dev.js", - "watch:desktop": "webpack -w --config webpack.dev.js --env.platform='desktop'", + "watch:desktop": "webpack -w --config webpack.dev.js --env platform='desktop'", "bundle": "webpack --config webpack.prod.js && yarn tsc", - "bundle:desktop": "webpack --config webpack.prod.js --env.platform='desktop'", - "bundle:desktop:beta": "webpack --config webpack.prod.js --env.platform='desktop' --env.public_beta='true'", + "bundle:desktop": "webpack --config webpack.prod.js --env platform='desktop'", + "bundle:desktop:beta": "webpack --config webpack.prod.js --env platform='desktop' --env public_beta='true'", "build": "bundle install && yarn install --frozen-lockfile && bundle exec rails assets:precompile && yarn bundle", "lint": "eslint --fix app/assets/javascripts", "tsc": "tsc --project app/assets/javascripts/tsconfig.json" diff --git a/webpack-defaults.js b/webpack-defaults.js new file mode 100644 index 000000000..6d0a67235 --- /dev/null +++ b/webpack-defaults.js @@ -0,0 +1,13 @@ +const Defaults = { + platform: 'web', +}; + +function mergeWithEnvDefaults(env) { + for (const key of Object.keys(Defaults)) { + if (!env[key]) { + env[key] = Defaults[key]; + } + } +} + +module.exports = mergeWithEnvDefaults; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 48e744080..a1d233b82 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,14 +1,11 @@ const path = require('path'); const webpack = require('webpack'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const mergeWithEnvDefaults = require('./webpack-defaults'); require('dotenv').config(); -const WebEnv = { - platform: 'web', -}; - module.exports = (env) => { - env = Object.assign(env, WebEnv); + mergeWithEnvDefaults(env); return { entry: './app/assets/javascripts/index.ts', output: { diff --git a/webpack.dev.js b/webpack.dev.js index 8983d758e..a081dd068 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -1,14 +1,12 @@ const { merge } = require('webpack-merge'); const config = require('./webpack.config.js'); const HtmlWebpackPlugin = require('html-webpack-plugin'); - -const WebEnv = { - platform: 'web', -}; +const mergeWithEnvDefaults = require('./webpack-defaults.js'); module.exports = (env, argv) => { const port = argv.port || 3001; - return merge(config(Object.assign(env, WebEnv), argv), { + mergeWithEnvDefaults(env); + return merge(config(env, argv), { mode: 'development', optimization: { minimize: false, diff --git a/webpack.prod.js b/webpack.prod.js index 2ea8d8cfd..c98bffcee 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -1,12 +1,10 @@ const { merge } = require('webpack-merge'); +const mergeWithEnvDefaults = require('./webpack-defaults.js'); const config = require('./webpack.config.js'); -const WebEnv = { - platform: 'web', -}; - module.exports = (env, argv) => { - return merge(config(Object.assign(env, WebEnv), argv), { + mergeWithEnvDefaults(env); + return merge(config(env, argv), { mode: 'production', devtool: 'source-map', });