记iframe+主应用gulp代理转发实现微前端,遇到的一些问题

本文讲述了如何在主应用中使用gulp搭建代理,解决子应用通过iframe在主应用中的加载问题,以及如何调整webpack的publicPath以适应代理配置。同时提到了处理跨域问题的方法,包括生产环境的nginx转发和开发环境的webpack配置调整。
摘要由CSDN通过智能技术生成

项目背景

  • 主应用gulp搭建
  • 多个子应用均使用react框架,webpack4.x搭建。
  • 生产环境已使用nginx代理转发实现微前端

实现过程

生产环境用nginx代理,开发环境配置代理即可搭建微前端

gulp实现代理

// gulpfile.js插入以下片段
var webserver = require('gulp-webserver');

gulp.task('webserver', function () {
	gulp.src('./')
		.pipe(webserver({
			proxies: [
				{
					source: '/api',
					target: 'http://localhost:3000',
				}
			]
		}))
})

本地项目里,iframe中 src 地址是 /api 开头的网页全部是A项目里的,A项目webpack启动本地地址是‘http://localhost:3000’,实际使用需根据项目情况修改source和target

可做如下验证

  1. 启动主应用及子应用,打开需代理的主应用网页,检查iframe的src,其应当指向子应用的网页,如 api/#/home/name/index在这里插入图片描述

  2. 将src根据gulp配置代理的source替换为target,新标签打开网页,应该正常显示(此例中打开http://localhost:3000/#/home/name/index)

此时发现,子应用单独显示正常,在主应用中显示白屏

打开控制台发现报错:
在这里插入图片描述
对比localhost:3000发现这里引入的4个静态资源有问题。先在localhost:3000里F12查看正常的静态资源路径
在这里插入图片描述
文件都被放在了localhost:3000/static文件夹下,而根据gulp中的代理信息,主应用请求的地址是localhost:3000下的,此时需要更改3000端口下的静态资源路径
publicPath是问题的关键,我在子项目里重写了webpack配置项

output: {
	publicPath: './'
}

具体publicPath及打包目录的内容可参看其他博主的详细介绍
修改完成后,localhost:3000资源目录如下:
在这里插入图片描述
此时主应用可正常请求到静态资源

题外的跨域问题,此项目未接触到(micro-app、wujie等微前端框架中需解决)

解决子应用跨域问题,生产环境用nginx转发,开发环境需手动配置,具体操作如下:
修改需要被访问项目的webpack配置

devServer: {
	headers: {
		'Access-Control-Allow-Origin': '*'
	}
}

总结

关键在于协调主应用代理地址与子应用静态资源目录的匹配

我是菜🐕,有问题欢迎斧正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值