微前端中如何正确共享 React 依赖避免重复加载?

司空玲玲 阅读 62

我在用 qiankun 搭建微前端项目,主应用和子应用都用了 React,但发现子应用会重新加载一份 React,导致 bundle 体积变大,还报了 React 重复加载的警告。

我尝试在 webpack 配置里把 React 设为 external,但子应用直接报 React is not defined。主应用确实已经加载了 React,该怎么让子应用复用主应用的 React 呢?

目前主应用的 webpack 配置里加了:

externals: {
  react: 'React',
  'react-dom': 'ReactDOM'
}

子应用也配了同样的 externals,但运行就出错,是不是漏了什么关键步骤?

我来解答 赞 15 收藏
二维码
手机扫码查看
1 条解答
打工人爱娜
问题在于主应用虽然配了 external,但全局变量还没加载。子应用找不到 React。

两个解法:

一、在主应用 index.html 里先用 script 标签加载 React(最简单):




二、用 qiankun 的 sharedScope(推荐):

主应用 main.js 配置:
import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
{
name: '子应用名',
entry: '//localhost:3001',
container: '#container',
activeRule: '/app',
shared: {
react: { singleton: true, eager: true },
'react-dom': { singleton: true, eager: true }
}
}
]);

start();

子应用 webpack 配置 externals 保持不变,同时在 package.json 里声明 react 和 react-dom 为 peerDependencies。

第一种方式最直接,先试试看。
点赞 1
2026-03-12 19:00