微前端中如何正确共享 React 依赖避免重复加载?
我在用 qiankun 搭建微前端项目,主应用和子应用都用了 React,但发现子应用会重新加载一份 React,导致 bundle 体积变大,还报了 React 重复加载的警告。
我尝试在 webpack 配置里把 React 设为 external,但子应用直接报 React is not defined。主应用确实已经加载了 React,该怎么让子应用复用主应用的 React 呢?
目前主应用的 webpack 配置里加了:
externals: {
react: 'React',
'react-dom': 'ReactDOM'
}
子应用也配了同样的 externals,但运行就出错,是不是漏了什么关键步骤?
两个解法:
一、在主应用 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。
第一种方式最直接,先试试看。