Module Federation远程应用引入子组件出现模块找不到错误
排查思路
检查文件路径与命名规范
- 确认
App1.tsx(或对应扩展名文件)与App.tsx处于同一src目录下,文件名大小写完全匹配(部分操作系统区分大小写,若实际文件为app1.tsx但引入时写App1会导致找不到)。 - 检查文件扩展名是否符合配置要求,确保是
.tsx而非.jsx或其他未被webpack识别的格式。
- 确认
验证远程应用的webpack解析配置
- 在远程端
craco.config.js的webpack.configure中,添加resolve.extensions配置,确保包含.tsx、.ts、.js等必要扩展名,避免webpack无法自动补全文件后缀:configure: (webpackConfig) => ({ ...webpackConfig, output: { ...webpackConfig.output, publicPath: "auto", }, resolve: { ...webpackConfig.resolve, extensions: ['.tsx', '.ts', '.js', '.jsx'], }, }), - 确认远程应用的webpack未通过
exclude规则排除App1.tsx所在目录。
- 在远程端
排查craco-esbuild与ModuleFederation的兼容性
- 暂时禁用
CracoEsbuildPlugin,改用默认babel编译流程,重新启动远程应用并测试。若问题消失,说明插件与模块联邦存在冲突:- 调整
CracoEsbuildPlugin的esbuildLoaderOptions,确保loader设置为tsx且target与项目兼容; - 检查插件是否覆盖了webpack默认的模块解析逻辑,可尝试添加
esbuildOptions补充模块解析配置。
- 调整
- 暂时禁用
检查远程应用打包产物
- 启动远程应用后,访问
http://localhost:3001/remoteEntry.js,查看产物中是否包含App1相关的模块标识。若未包含,说明远程应用打包时未将App1纳入编译范围,需检查webpack入口或模块依赖链是否正常。
- 启动远程应用后,访问
测试最小化场景
- 在远程应用
src目录下新建极简测试组件Test.tsx,仅返回基础JSX内容,在App.tsx中引入该组件。若同样出现找不到模块的错误,说明是通用配置问题;若正常,则排查App1.tsx自身的依赖或语法错误(比如内部引入了不存在的文件)。
- 在远程应用
内容的提问来源于stack exchange,提问作者Kierchon
相关产品推荐
相关产品推荐

