From d44df39cd2b4784d7bab260d4c43442416fafb9c Mon Sep 17 00:00:00 2001 From: Mungo Dewar Date: Thu, 9 Oct 2025 10:32:51 +0100 Subject: [PATCH 1/3] apply loadable resolution for ssr builds so that consistent module (CJS) is always resolved --- packages/react-scripts/config/webpack.config.ssr.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-scripts/config/webpack.config.ssr.js b/packages/react-scripts/config/webpack.config.ssr.js index 05b25d7ea49..f06d9381cd9 100644 --- a/packages/react-scripts/config/webpack.config.ssr.js +++ b/packages/react-scripts/config/webpack.config.ssr.js @@ -351,6 +351,7 @@ module.exports = function (webpackEnv) { .map(ext => `.${ext}`) .filter(ext => useTypeScript || !ext.includes('ts')), alias: { + '@loadable/component': require.resolve('@loadable/component'), // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 'react-native': 'react-native-web', From dba6ddc3c80055bc29273a70dcd8325e5ef6cc6b Mon Sep 17 00:00:00 2001 From: Mungo Dewar Date: Thu, 9 Oct 2025 10:54:33 +0100 Subject: [PATCH 2/3] detect local components before setting alias --- .../backpack-addons/ssr/isLocalComponents.js | 17 +++++++++++++++++ .../react-scripts/config/webpack.config.ssr.js | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/react-scripts/backpack-addons/ssr/isLocalComponents.js diff --git a/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js b/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js new file mode 100644 index 00000000000..5027e4a94e1 --- /dev/null +++ b/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js @@ -0,0 +1,17 @@ +'use strict'; + +const paths = require('../../config/paths'); + +/** + * Checking for loadable install, as there is need to set aliases when this is the case + */ +const isLocalComponents = () => { + // Ensure `ssrEnabled` is on + const appPackageJson = require(paths.appPackageJson); + const isLocalComponentsInstalled = + appPackageJson['@skyscanner-internal/local-components'] || {}; + + return isLocalComponentsInstalled; +}; + +module.exports = isLocalComponents; diff --git a/packages/react-scripts/config/webpack.config.ssr.js b/packages/react-scripts/config/webpack.config.ssr.js index f06d9381cd9..916f9763311 100644 --- a/packages/react-scripts/config/webpack.config.ssr.js +++ b/packages/react-scripts/config/webpack.config.ssr.js @@ -34,6 +34,7 @@ const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin' const createEnvironmentHash = require('./webpack/persistentCache/createEnvironmentHash'); const isSsr = require('../backpack-addons/ssr/isSsr'); // #backpack-addons ssr +const isLoadable = require('../backpack-addons/ssr/isLocalComponents'); // #backpack-addons ssr // Just for the case that `ssr.js` exists in `src` folder but not in SSR mode const needBuildSsr = !isSsr() && fs.existsSync(paths.appSsrJs); @@ -351,7 +352,9 @@ module.exports = function (webpackEnv) { .map(ext => `.${ext}`) .filter(ext => useTypeScript || !ext.includes('ts')), alias: { - '@loadable/component': require.resolve('@loadable/component'), + ...(isLoadable() + ? { '@loadable/component': require.resolve('@loadable/component') } + : {}), // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 'react-native': 'react-native-web', From 8d8abfc3983fcf2303123ac80fb71382fefc8a0a Mon Sep 17 00:00:00 2001 From: Mungo Dewar Date: Thu, 9 Oct 2025 11:01:57 +0100 Subject: [PATCH 3/3] fix isLocal --- .../react-scripts/backpack-addons/ssr/isLocalComponents.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js b/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js index 5027e4a94e1..f498b4c9efd 100644 --- a/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js +++ b/packages/react-scripts/backpack-addons/ssr/isLocalComponents.js @@ -6,10 +6,9 @@ const paths = require('../../config/paths'); * Checking for loadable install, as there is need to set aliases when this is the case */ const isLocalComponents = () => { - // Ensure `ssrEnabled` is on const appPackageJson = require(paths.appPackageJson); const isLocalComponentsInstalled = - appPackageJson['@skyscanner-internal/local-components'] || {}; + appPackageJson['@skyscanner-internal/local-components']; return isLocalComponentsInstalled; };