diff --git a/src/fixes.ts b/src/fixes.ts index 2a91fce..9f2f703 100644 --- a/src/fixes.ts +++ b/src/fixes.ts @@ -3,6 +3,8 @@ import { Configuration, Options } from 'webpack'; import get from 'lodash.get'; import { createRequire } from './utils'; +const FRAMEWORK_BUNDLES = [`react`, `react-dom`, `scheduler`, `prop-types`]; + /** * Fix missing framework in development. * See https://github.com/Js-Brecht/gatsby-plugin-pnpm/issues/8 @@ -14,38 +16,34 @@ export const fixFrameworkCache = (config: Configuration, siteDirectory: string) if (!framework) return; if (typeof framework !== "object" || !framework.test) return; - if (!(framework.test instanceof RegExp)) return; - const regVal = framework.test - .toString() - .replace(/[[\\\]]/g, "") - .slice(1, -1); - const frameworkPackages = /\/\(([^)]+)\)\/$/.exec(regVal); const frameworkList: string[] = []; - - if (frameworkPackages) { - const frameworkRequire = createRequire(`${siteDirectory}/:internal:`); - Object.assign( - frameworkList, - frameworkPackages[1] - .split("|") - .map((f) => { - try { - return path.dirname( - frameworkRequire.resolve(`${f}/package.json`), - ) + path.sep; - } catch (err) { - return ""; - } - }) - .filter(Boolean), - ); - } + const frameworkRequire = createRequire(`${siteDirectory}/:internal:`); + Object.assign( + frameworkList, + FRAMEWORK_BUNDLES + .map((f) => { + try { + return path.dirname( + frameworkRequire.resolve(`${f}/package.json`), + ) + path.sep; + } catch (err) { + return ""; + } + }) + .filter(Boolean), + ); const isRootDependency = (val?: string) => ( frameworkList.some((f) => val?.startsWith(f)) ); - framework.test = (mod) => ( - isRootDependency(mod.resource) - ); + framework.test = (mod) => { + if ( + mod.rawRequest === `react-dom/server` || + mod.rawRequest?.includes(`/react-dom-server`) + ) { + return false; + } + return isRootDependency(mod.resource); + }; }; \ No newline at end of file