问题起因
最初将微应用打包到
uniCloud
上做前端网页托管,没什么问题,能够调到后端,页面也没什么问题。
直到将页面打包部署到服务器上时,页面开始出现各种报错:
- 缺少生命周期
you need to export lifecycle functions in xxx(微应用名称) entry
【其实就是没有加载到微应用,但是确定已经在微应用中main.js
已经暴露出了bootstrap()
等生命周期—所以这个不是真实的问题】- 目标容器不存在
Target container with #my-mico-app not existed after qiankun-vue loading
【容器没有,导致浏览器疯狂循环子应用的layout层
(如果有容器子应用是没有这个的,应该加载本身的页面)闪烁】
解决方案
最终,在测试了各种服务的情况下,尝试修改
nginx
,想起了vue
的history
路由在nginx
路径问题
- nginx配置微应用路径/xxx/与/404
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html; #$uri/用于匹配子应用目录下的索引页
error_page 404 /index.html; # 配上404页面
}
try_files
:其作用是按顺序检查本地(服务器)文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
查找方式:
- 按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理
- 查找路径是按照给定的root或alias为根路径来查找的
- 如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配
- 如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码
打包后的结构
map
子应用结构
- 如果不写上
$uri/
,当直接访问一个目录路径如127.0.0.1/map/xxx
(即子应用下的路由时,不会去map
包下的index.html
【127.0.0.1/map/index.html
】)