@@ -55,6 +55,7 @@ import { scanBuildStripPlugin } from './plugins/scan'
5555import { validateImportPlugin } from './plugins/validate-import'
5656import { vitePluginFindSourceMapURL } from './plugins/find-source-map-url'
5757import { parseCssVirtual , toCssVirtual , parseIdQuery } from './plugins/shared'
58+ import { hasUncaughtExceptionCaptureCallback } from 'node:process'
5859
5960const isRolldownVite = 'rolldownVersion' in vite
6061
@@ -342,7 +343,7 @@ export default function vitePluginRsc(
342343 }
343344 }
344345
345- let reactServerDomPackageName = REACT_SERVER_DOM_NAME
346+ let hasReactServerDomWebpack = false
346347
347348 return [
348349 {
@@ -377,15 +378,12 @@ export default function vitePluginRsc(
377378 PKG_NAME ,
378379 ...result . ssr . noExternal . sort ( ) ,
379380 ]
380-
381- // Detect if user has react-server-dom-webpack installed
382- try {
383- const require = createRequire (
384- path . join ( config . root ?? process . cwd ( ) , '*' ) ,
385- )
386- require . resolve ( 'react-server-dom-webpack/package.json' )
387- reactServerDomPackageName = 'react-server-dom-webpack'
388- } catch { }
381+ hasReactServerDomWebpack = result . ssr . noExternal . includes (
382+ 'react-server-dom-webpack' ,
383+ )
384+ const reactServerDomPackageName = hasReactServerDomWebpack
385+ ? 'react-server-dom-webpack'
386+ : REACT_SERVER_DOM_NAME
389387
390388 return {
391389 appType : config . appType ?? 'custom' ,
@@ -700,30 +698,25 @@ export default function vitePluginRsc(
700698 } ,
701699 {
702700 // Alias plugin to redirect vendored react-server-dom imports to user's package when available
703- name : 'rsc:react-server-dom-alias' ,
704- enforce : 'pre' ,
705- async resolveId ( source , importer , options ) {
706- // Only handle imports from the vendored path
707- if ( ! source . startsWith ( `${ PKG_NAME } /vendor/react-server-dom/` ) ) {
708- return null
709- }
710-
711- // Extract the subpath (e.g., "client.browser", "server.edge", etc.)
712- const subpath = source . slice (
713- `${ PKG_NAME } /vendor/react-server-dom/` . length ,
714- )
715-
716- // If user has their own package, resolve to it instead
717- if ( reactServerDomPackageName === 'react-server-dom-webpack' ) {
718- const newSource = `react-server-dom-webpack/${ subpath } `
719- return this . resolve ( newSource , importer , {
720- ...options ,
721- skipSelf : true ,
722- } )
723- }
724-
725- // Otherwise, let the default resolution handle the vendored path
726- return null
701+ name : 'rsc:react-server-dom-webpack-alias' ,
702+ resolveId : {
703+ order : 'pre' ,
704+ async handler ( source , importer , options ) {
705+ if (
706+ hasReactServerDomWebpack &&
707+ source . startsWith ( `${ PKG_NAME } /vendor/react-server-dom/` )
708+ ) {
709+ const newSource = source . replace (
710+ `${ PKG_NAME } /vendor/react-server-dom` ,
711+ 'react-server-dom-webpack' ,
712+ )
713+ const resolved = await this . resolve ( newSource , importer , {
714+ ...options ,
715+ skipSelf : true ,
716+ } )
717+ return resolved
718+ }
719+ } ,
727720 } ,
728721 } ,
729722 {
0 commit comments