Skip to content

Commit 2af359d

Browse files
committed
fix(rsc-mf): bind remote callback to local rsc client module
1 parent faad3ae commit 2af359d

2 files changed

Lines changed: 27 additions & 10 deletions

File tree

tests/integration/rsc-mf/remote/modern.config.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,28 @@ import { moduleFederationPlugin } from '@module-federation/modern-js-v3';
44

55
const remotePort = process.env.RSC_MF_REMOTE_PORT || process.env.PORT || '3008';
66
const enableRemoteServeSsr = Boolean(process.env.PORT);
7+
const serverOnlyEmptyPath = path.join(
8+
path.dirname(require.resolve('server-only')),
9+
'empty.js',
10+
);
11+
const reactRuntimeDir = path.dirname(require.resolve('react'));
12+
const reactJsxRuntimeServerPath = path.join(
13+
reactRuntimeDir,
14+
'jsx-runtime.react-server.js',
15+
);
16+
const reactJsxDevRuntimeServerPath = path.join(
17+
reactRuntimeDir,
18+
'jsx-dev-runtime.react-server.js',
19+
);
20+
const reactServerDomClientBrowserPath = require.resolve(
21+
'react-server-dom-rspack/client.browser',
22+
);
723

824
export default defineConfig({
925
server: {
1026
rsc: true,
1127
ssr: enableRemoteServeSsr,
28+
port: Number(remotePort),
1229
},
1330
// Keep RSC server entries synchronous for MF+RSC handlers.
1431
source: {
@@ -26,29 +43,29 @@ export default defineConfig({
2643
bundlerChain(chain) {
2744
const target = chain.get('target');
2845
const targets = Array.isArray(target) ? target : [target];
46+
chain.resolve.alias.set(
47+
'rsc-mf-react-server-dom-client-browser$',
48+
reactServerDomClientBrowserPath,
49+
);
2950
if (targets.some(item => String(item).includes('node'))) {
3051
chain.target('async-node');
3152
chain.resolve.conditionNames
3253
.clear()
33-
.add('react-server')
34-
.add('require')
35-
.add('import')
36-
.add('default');
37-
chain.module
38-
.rule('rsc-mf-ssr-no-react-server')
39-
.test(/\.[cm]?[jt]sx?$/)
40-
.issuerLayer('server-side-rendering')
41-
.resolve.conditionNames.clear()
4254
.add('require')
4355
.add('import')
4456
.add('default');
57+
chain.resolve.alias
58+
.set('react/jsx-runtime$', reactJsxRuntimeServerPath)
59+
.set('react/jsx-dev-runtime$', reactJsxDevRuntimeServerPath)
60+
.set('server-only$', serverOnlyEmptyPath);
4561
chain.output.publicPath(`http://127.0.0.1:${remotePort}/bundles/`);
4662
chain.module
4763
.rule('rsc-mf-remote-components-layer')
4864
.test(/src[\\/]components[\\/].*\.[tj]sx?$/)
4965
.layer('react-server-components');
5066
} else {
5167
chain.optimization.splitChunks(false);
68+
chain.output.chunkLoadingGlobal('chunk_rscHost');
5269
chain.output.publicPath(`http://127.0.0.1:${remotePort}/`);
5370
}
5471

tests/integration/rsc-mf/remote/src/components/registerServerCallback.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { setServerCallback } from 'react-server-dom-rspack/client.browser';
1+
import { setServerCallback } from 'rsc-mf-react-server-dom-client-browser';
22

33
type CallServer = (id: string, args: unknown[]) => Promise<unknown>;
44

0 commit comments

Comments
 (0)