diff --git a/packages/react-server-dom-webpack/package.json b/packages/react-server-dom-webpack/package.json index 3f09719bb06e7..f32d8cdeefd7d 100644 --- a/packages/react-server-dom-webpack/package.json +++ b/packages/react-server-dom-webpack/package.json @@ -66,7 +66,7 @@ "./server.node.unbundled": "./server.node.unbundled.js", "./node-loader": "./esm/react-server-dom-webpack-node-loader.production.min.js", "./node-register": "./node-register.js", - "./src/*": "./src/*", + "./src/*": "./src/*.js", "./package.json": "./package.json" }, "main": "index.js", diff --git a/scripts/rollup/build.js b/scripts/rollup/build.js index a8de88db5c412..f7ce2760fb7bf 100644 --- a/scripts/rollup/build.js +++ b/scripts/rollup/build.js @@ -173,6 +173,31 @@ function getBabelConfig( return options; } +let getRollupInteropValue = id => { + // We're setting Rollup to assume that imports are ES modules unless otherwise specified. + // However, we also compile ES import syntax to `require()` using Babel. + // This causes Rollup to turn uses of `import SomeDefaultImport from 'some-module' into + // references to `SomeDefaultImport.default` due to CJS/ESM interop. + // Some CJS modules don't have a `.default` export, and the rewritten import is incorrect. + // Specifying `interop: 'default'` instead will have Rollup use the imported variable as-is, + // without adding a `.default` to the reference. + const modulesWithCommonJsExports = [ + 'JSResourceReferenceImpl', + 'error-stack-parser', + 'art/core/transform', + 'art/modes/current', + 'art/modes/fast-noSideEffects', + 'art/modes/svg', + ]; + + if (modulesWithCommonJsExports.includes(id)) { + return 'default'; + } + + // For all other modules, handle imports without any import helper utils + return 'esModule'; +}; + function getRollupOutputOptions( outputPath, format, @@ -187,7 +212,7 @@ function getRollupOutputOptions( format, globals, freeze: !isProduction, - interop: false, + interop: getRollupInteropValue, name: globalName, sourcemap: false, esModule: false, @@ -612,7 +637,7 @@ async function createBundle(bundle, bundleType) { output: { externalLiveBindings: false, freeze: false, - interop: false, + interop: getRollupInteropValue, esModule: false, }, }; diff --git a/scripts/rollup/bundles.js b/scripts/rollup/bundles.js index e4ff1cf8bf0f7..f29fe5e17a433 100644 --- a/scripts/rollup/bundles.js +++ b/scripts/rollup/bundles.js @@ -442,7 +442,7 @@ const bundles = [ { bundleTypes: [NODE_ES2015], moduleType: RENDERER_UTILS, - entry: 'react-server-dom-webpack/src/ReactFlightWebpackNodeRegister.js', + entry: 'react-server-dom-webpack/src/ReactFlightWebpackNodeRegister', name: 'react-server-dom-webpack-node-register', global: 'ReactFlightWebpackNodeRegister', minifyWithProdErrorCodes: false, diff --git a/scripts/rollup/wrappers.js b/scripts/rollup/wrappers.js index 3c64e462ae33c..d9b0a60c12cfa 100644 --- a/scripts/rollup/wrappers.js +++ b/scripts/rollup/wrappers.js @@ -354,7 +354,10 @@ if (process.env.NODE_ENV !== "production") { ${source} return exports; }; -}`; + module.exports.default = module.exports; + Object.defineProperty(module.exports, "__esModule", { value: true }); +} +`; }, /***************** NODE_PROD (reconciler only) *****************/ @@ -366,10 +369,14 @@ ${source} ${license} */ module.exports = function $$$reconciler($$$hostConfig) { + var exports = {}; ${source} return exports; -};`; +}; +module.exports.default = module.exports; +Object.defineProperty(module.exports, "__esModule", { value: true }); +`; }, /***************** NODE_PROFILING (reconciler only) *****************/ @@ -384,7 +391,10 @@ module.exports = function $$$reconciler($$$hostConfig) { var exports = {}; ${source} return exports; -};`; +}; +module.exports.default = module.exports; +Object.defineProperty(module.exports, "__esModule", { value: true }); +`; }, };