简介:本文详细介绍如何在一个域名下部署多个uni-app应用,涵盖路由配置、子目录部署、Nginx反向代理等关键技术,助力开发者实现资源优化与统一管理。
在传统开发模式中,每个uni-app应用通常需要独立域名或子域名部署,这会导致服务器资源分散、管理成本增加、域名费用累积等问题。对于中小型企业或个人开发者而言,这种模式既不经济也不高效。而通过一个域名部署多个应用,可以显著降低服务器和域名成本,同时实现统一入口管理,提升用户体验。
例如,某教育公司开发了三个uni-app应用:教师端、学生端和管理端。若每个应用单独部署,需要三个域名和三套服务器配置。而通过一个域名部署,只需配置不同路径即可区分应用,既节省成本又便于维护。
uni-app支持通过路由配置实现子目录部署。具体步骤如下:
在项目根目录的vue.config.js中,设置publicPath为子目录路径:
module.exports = {
publicPath: process.env.NODE_ENV === 'production'
? '/teacher-app/'
: '/'
}
此配置表示生产环境下应用将部署在/teacher-app/路径下。
在manifest.json中配置路由模式:
{
"h5": {
"router": {
"mode": "history",
"base": "/teacher-app/"
}
}
}
base字段需与publicPath保持一致。
在Nginx配置文件中添加location规则:
server {
listen 80;
server_name example.com;
location /teacher-app/ {
alias /path/to/teacher-app/dist/;
try_files $uri $uri/ /teacher-app/index.html;
}
}
此配置将/teacher-app/路径的请求指向教师端应用的构建目录。
对于完全独立的应用,可通过多入口文件实现:
在src目录下创建teacher/main.js和student/main.js等入口文件。
在pages.json中通过condition字段区分应用:
{
"condition": {
"current": 0,
"list": [
{
"name": "教师端",
"path": "teacher/pages/index/index"
},
{
"name": "学生端",
"path": "student/pages/index/index"
}
]
}
}
通过--entry参数指定构建入口:
npm run build -- --entry teacher/main.js
对于更复杂的场景,可通过Nginx反向代理实现:
server {
listen 80;
server_name example.com;
location /teacher/ {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /student/ {
proxy_pass http://localhost:8081/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
此配置将/teacher/和/student/路径分别代理到不同端口的服务。
若后端服务不支持子目录,可通过rewrite指令调整:
location /teacher/ {
rewrite ^/teacher/(.*)$ /$1 break;
proxy_pass http://localhost:8080;
}
问题:部署后静态资源404。
解决:确保publicPath和manifest.json中的base配置一致,且服务器配置的alias指向正确目录。
问题:应用内路由跳转返回404。
解决:检查Nginx的try_files配置是否包含index.html,例如:
try_files $uri $uri/ /teacher-app/index.html;
问题:多应用间Cookie不共享。
解决:若需共享Cookie,设置domain为顶级域名(如.example.com);若需隔离,保持默认子域名配置。
publicPath和路由配置一致。对于超大型应用,可考虑微前端方案:
import-html-entry等技术动态加载。在一个域名下部署多个uni-app应用,可通过路由配置、多入口文件、反向代理等技术实现。关键点包括:
publicPath、base)alias/proxy_pass)此方案尤其适合资源有限、需要统一管理的场景,既能降低成本,又能提升维护效率。实际部署时,建议先在测试环境验证路径配置和路由跳转,再逐步推广到生产环境。