Skip to content

[Bug]: MPA 场景下多个入口共用同一个 React Server Action 时,除一个入口外其余入口无法正确解析该 Action #8207

@GiveMe-A-Name

Description

@GiveMe-A-Name

Version

System:
    OS: Linux 5.15 GNU/Linux 2 (lyra) 2 (lyra)
    CPU: (64) x64 INTEL(R) XEON(R) PLATINUM 8582C
    Memory: 224.40 GB / 247.51 GB
    Container: Yes
    Shell: 5.2.15 - /bin/bash
  npmPackages:
    @modern-js/app-tools: 2.69.4 => 2.69.4

Details

在 modern.js 的 React Server Components(RSC)中,MPA 项目里如果多个入口页面引用同一个 server action(例如从 src/actions/shared.ts 导出的带 "use server" 的函数),开发或构建后只有其中一个入口能正常调用该 action,其它入口会报错无法找到对应的 server action,或被路由到错误的 action。

Reproduce link

Reproduce Steps

  1. 初始化一个启用 RSC 的 MPA 项目(多个 entries)。
  2. 在两个入口页面中同时引入并使用同一个 server action。
// src/actions/shared.ts
'use server';

export async function ping(message: string) {
  return `ok: ${message}`;
}
// src/entries/a/page.tsx
import { ping } from '../../actions/shared';

export default function PageA() {
  return (
    <form action={ping}>
      <button type="submit">A 调用 ping</button>
    </form>
  );
}
// src/entries/b/page.tsx
import { ping } from '../../actions/shared;

export default function PageB() {
  return (
    <form action={ping}>
      <button type="submit">B 调用 ping</button>
    </form>
  );
}
  1. 启动 dev 或构建并预览,访问两个入口页面,观察 server action 的调用结果。

预期行为

  • 每个入口都应能正确绑定并调用同一个 server action,互不影响。

实际行为

  • 只有一个入口能正常调用该 action。其它入口出现错误

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions