前端项目融合
前端项目融合
需求描述
有一个老项目,使用 vue2.x 全家桶做的,现在要添加一个比较大的功能模块,是一个编辑器,准备使用 Vue3.x 实现。
这时候需要考虑的是,如何在用户无感知的情况下,将这两个项目融合在一起。预计是打开编辑器的时候打开一个新的 tab 进行编辑,但是域名不变。
我们的业务域名是http://example.com
,给新项目准备的统一前缀是/editor/
,新功能模块的路由是/edit
,那么在访问http://example.com/editor/edit?id=1
的时候应该访问新的前端项目,在访问其他路由的时候需要访问原来的前端项目。
由于是使用的 Vite4.0,注意新项目的配置文件需要添加base: "/editor/"
匹配 URL 路径名
解决方案
在服务器部署的时候,需要准备 2 个独立的文件夹分别用来存放两个前端项目 build 出来的文件,分别是html
(旧)和editor
(新),接下来想要实现的目标是:
- 访问
/editor/*
的时候应该访问文件夹editor
- 访问其他路由的时候需要访问原来的前端项目
这部分需要调整我们 nginx 的 location 命中规则
nginx
现在的规则是这么写的:
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
那么添加一个文件夹就添加一个规则:
location /editor {
root editor;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
添加规则后,测试发现访问/editor
仍然命中了原来的项目,经过查询发现很多人使用alias
代替root
location /editor {
alias editor;
index index.html index.htm;
try_files $uri $uri/ /editor/index.html;
}
这次成功了,经过查询知道了 root 和 alias 的不同:
root
会把请求 url 的 (ip+port)/域名 替换为 root 指定的目录,访问资源
alias
把请求 url 的 (ip+port)/域名+匹配到的路径替换为 alias 指定的目录,访问资源
也就是说我们第一次的 root 写法也可以,只不过需要在 editor 的里面再建一个 editor,肯定是不如 alias 方便和容易理解
转载自:https://juejin.cn/post/7216561521974624293