diff --git a/packages/webpack5/src/configuration/base.ts b/packages/webpack5/src/configuration/base.ts index 72e25bb79..a623222cb 100644 --- a/packages/webpack5/src/configuration/base.ts +++ b/packages/webpack5/src/configuration/base.ts @@ -134,6 +134,8 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { 'mdn-data/css/at-rules.json': require.resolve( '../polyfills/mdn-data-at-rules.js', ), + // Ensure imports of the Node 'module' builtin resolve to our polyfill + module: require.resolve('../polyfills/module.js'), }, }); diff --git a/packages/webpack5/src/polyfills/module.ts b/packages/webpack5/src/polyfills/module.ts index 2de230592..ebc2b6ffe 100644 --- a/packages/webpack5/src/polyfills/module.ts +++ b/packages/webpack5/src/polyfills/module.ts @@ -27,6 +27,21 @@ function createRequire(filename: string) { }; } +// CommonJS export module.exports = { createRequire: createRequire, }; + +// Provide a named export for ESM consumers: `import { createRequire } from 'module'` +try { + Object.defineProperty(module.exports, 'createRequire', { + enumerable: true, + value: createRequire, + }); + // Also export under an __esModule flag for certain bundlers + Object.defineProperty(module.exports, '__esModule', { + value: true, + }); +} catch (e) { + // ignore in environments where defineProperty is unavailable +}