/** * Stago 平台 Module Federation 共享依赖约定 * Host(Vite)与 Remote(Vite 模块)须与此对齐 */ export interface MfSharedDependency { singleton?: boolean requiredVersion?: string strictVersion?: boolean /** 宿主预加载,Remote 挂载时可直接复用 */ eager?: boolean /** false = 不打包进 Remote,必须由 Host 提供 */ import?: boolean } export type MfSharedConfig = Record const reactShared = { singleton: true, requiredVersion: '^19.0.0', strictVersion: false, } as const satisfies MfSharedDependency /** * 宿主 shared 配置(apps/web/vite.config.ts) * eager: 底座启动时加载,避免 Remote 报 "must be provided by host" */ export const stagoHostShared = { react: { ...reactShared, eager: true }, 'react-dom': { ...reactShared, eager: true }, 'react-dom/client': { ...reactShared }, 'react/jsx-runtime': { ...reactShared }, antd: { singleton: true, requiredVersion: '^6.0.0', strictVersion: false, eager: true, }, '@ant-design/icons': { singleton: true, requiredVersion: '^6.0.0', strictVersion: false, }, '@stago/sdk': { singleton: true, requiredVersion: '*', strictVersion: false, eager: true, }, } satisfies MfSharedConfig /** * Remote 模块 shared 配置(vite.config.ts federation.shared) * import: false → 依赖宿主提供,减小模块包体积 * * 不含 `@ant-design/icons`:MF Vite 1.18+(Rolldown)在 import:false 下无法解析该包 * named exports(入口含 `export { default }`),会导致 remote 生产构建 MISSING_EXPORT。 * Remote 用命名导入即可 tree-shake;宿主仍通过 stagoHostShared 持有 icons。 */ export const stagoRemoteShared = { react: { ...reactShared, import: false }, 'react-dom': { ...reactShared, import: false }, 'react-dom/client': { ...reactShared, import: false }, 'react/jsx-runtime': { ...reactShared, import: false }, antd: { singleton: true, requiredVersion: '^6.0.0', strictVersion: false, import: false, }, '@stago/sdk': { singleton: true, requiredVersion: '*', import: false, }, } satisfies MfSharedConfig /** 写入 module.json federation.shared 元数据的包名列表(与 stagoRemoteShared 对齐) */ export const stagoMfSharedPackageNames = [ 'react', 'react-dom', 'react-dom/client', 'react/jsx-runtime', 'antd', '@stago/sdk', ] as const