From 327118a639291f713f3968d75dd4767ad4eb8481 Mon Sep 17 00:00:00 2001 From: Luke Sheard Date: Thu, 28 Apr 2022 15:56:08 +0200 Subject: [PATCH] Exclude node builtins from build --- .changeset/odd-ants-appear.md | 5 +++++ .../react-scripts/config/webpack.config.js | 15 +++++---------- .../esbuild-scripts/config/createEsbuildConfig.ts | 8 ++++++++ 3 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 .changeset/odd-ants-appear.md diff --git a/.changeset/odd-ants-appear.md b/.changeset/odd-ants-appear.md new file mode 100644 index 000000000..72e6f4d04 --- /dev/null +++ b/.changeset/odd-ants-appear.md @@ -0,0 +1,5 @@ +--- +"modular-scripts": major +--- + +Exclude node builtins from build diff --git a/packages/modular-scripts/react-scripts/config/webpack.config.js b/packages/modular-scripts/react-scripts/config/webpack.config.js index ff26a93f3..41da0a3b0 100644 --- a/packages/modular-scripts/react-scripts/config/webpack.config.js +++ b/packages/modular-scripts/react-scripts/config/webpack.config.js @@ -5,6 +5,7 @@ const fs = require('fs'); const path = require('path'); const webpack = require('webpack'); const resolve = require('resolve'); +const builtinModules = require('builtin-modules'); const PnpWebpackPlugin = require('pnp-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); @@ -632,16 +633,10 @@ module.exports = function (webpackEnv) { ].filter(Boolean), // Some libraries import Node modules but don't use them in the browser. // Tell webpack to provide empty mocks for them so importing them works. - node: { - module: 'empty', - dgram: 'empty', - dns: 'mock', - fs: 'empty', - http2: 'empty', - net: 'empty', - tls: 'empty', - child_process: 'empty', - }, + node: builtinModules.reduce((acc, next) => { + acc[next] = false; + return acc; + }, {}), // Turn off performance processing because we utilize // our own hints via the FileSizeReporter performance: false, diff --git a/packages/modular-scripts/src/esbuild-scripts/config/createEsbuildConfig.ts b/packages/modular-scripts/src/esbuild-scripts/config/createEsbuildConfig.ts index 5556e4032..193fbfd20 100644 --- a/packages/modular-scripts/src/esbuild-scripts/config/createEsbuildConfig.ts +++ b/packages/modular-scripts/src/esbuild-scripts/config/createEsbuildConfig.ts @@ -1,6 +1,7 @@ import isCi from 'is-ci'; import * as path from 'path'; import * as esbuild from 'esbuild'; +import builtinModules from 'builtin-modules'; import type { Paths } from '../../utils/createPaths'; import getClientEnvironment from './getClientEnvironment'; import createEsbuildBrowserslistTarget from '../../utils/createEsbuildBrowserslistTarget'; @@ -34,6 +35,11 @@ export default function createEsbuildConfig( logger.debug(`Using target: ${target.join(', ')}`); + // merge and de-duplicate node builtins with external in the parameters + const external = [ + ...new Set((partialConfig.external ?? []).concat(builtinModules)), + ]; + return { entryPoints: [paths.appIndexJs], plugins, @@ -72,5 +78,7 @@ export default function createEsbuildConfig( publicPath: paths.publicUrlOrPath, nodePaths: (process.env.NODE_PATH || '').split(path.delimiter), ...partialConfig, + // this was merged previously; do not override. + external, }; }