diff --git a/webpack.config.js b/webpack.config.js index 5f5f86f5..bb80a0b1 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,12 +7,14 @@ const { verifyEnvironment } = require('./expect-env'); const nodeExternals = require('webpack-node-externals'); const debug = require('debug')(`${require('./package.json').name}:webpack-config`); -let env = {}; +let sanitizedEnv = {}; +let { NODE_ENV, ...sanitizedProcessEnv } = { ...process.env, NODE_ENV: 'production' }; try { require('fs').accessSync('.env'); - env = require('dotenv').config().parsed; - debug('new env vars: %O', env); + ({ NODE_ENV, ...sanitizedEnv } = require('dotenv').config().parsed); + debug(`NODE_ENV: ${NODE_ENV}`); + debug('sanitized env: %O', sanitizedEnv); } catch (e) { debug(`env support disabled; reason: ${e}`); } @@ -20,9 +22,15 @@ try { verifyEnvironment(); const envPlugins = [ + // ? NODE_ENV is not a "default" (unlike below) but an explicit overwrite + new DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(NODE_ENV) + }), // ? Load our .env results as the defaults (overridden by process.env) - new EnvironmentPlugin({ ...env, ...process.env }), - // ? Create shim process.env for undefined vars (per my tastes!) + new EnvironmentPlugin({ ...sanitizedEnv, ...sanitizedProcessEnv }), + // ? Create shim process.env for undefined vars + // ! The above already replaces all process.env.X occurrences in the code + // ! first, so plugin order is important here new DefinePlugin({ 'process.env': '{}' }) ]; @@ -55,7 +63,8 @@ const libConfig = { stats: { orphanModules: true, providedExports: true, - usedExports: true + usedExports: true, + errorDetails: true }, resolve: { extensions: ['.ts', '.wasm', '.mjs', '.cjs', '.js', '.json'] }, @@ -88,7 +97,8 @@ const externalsConfig = { stats: { orphanModules: true, providedExports: true, - usedExports: true + usedExports: true, + errorDetails: true }, resolve: { extensions: ['.ts', '.wasm', '.mjs', '.cjs', '.js', '.json'] }, @@ -123,7 +133,8 @@ const externalsConfig = { stats: { orphanModules: true, providedExports: true, - usedExports: true + usedExports: true, + errorDetails: true }, resolve: { extensions: ['.ts', '.wasm', '.mjs', '.cjs', '.js', '.json'] },