简介:本文详细解析uni-app框架下如何在一个域名下部署多个应用,涵盖路由配置、子目录部署、环境隔离及性能优化策略,提供可落地的技术方案。
在数字化转型背景下,企业常面临多业务线并行开发的挑战。例如某电商集团需同时维护B2C商城、供应商后台、物流管理系统三个uni-app应用,若采用独立域名部署,将产生显著成本:
通过单域名部署方案,企业可将三个应用的年度运维成本从约1500元降至300元以下,同时简化DNS管理。典型适用场景包括:
基础路径配置:在manifest.json中设置"h5"节点的"router"配置:
{"h5": {"router": {"mode": "hash","base": "/app1/"}}}
此配置将应用根路径映射至/app1/,需确保后端服务器正确配置静态资源路径。
动态路由方案:采用Nginx的try_files指令实现路径分发:
location /app1/ {try_files $uri $uri/ /app1/index.html;}location /app2/ {try_files $uri $uri/ /app2/index.html;}
该配置可处理深度链接问题,确保404页面正确回退至应用入口。
Webpack多入口配置:在vue.config.js中定义:
module.exports = {pages: {app1: {entry: 'src/app1/main.js',template: 'public/app1.html'},app2: {entry: 'src/app2/main.js',template: 'public/app2.html'}}}
此配置生成独立的HTML入口文件,配合Nginx的alias指令实现资源隔离。
API网关设计:建议采用以下模式:
// 环境变量配置const API_BASE = process.env.NODE_ENV === 'app1'? '/api/app1/': '/api/app2/';// 封装请求方法export const request = (url, options) => {return uni.request({url: `${API_BASE}${url}`,...options});}
通过构建时注入环境变量实现API端点隔离。
资源预加载策略:在pages.json中配置:
{"preloadRule": {"app1/pages/index": {"network": "all","packages": ["__APP__"]}}}
此配置可提升应用切换速度30%以上。
CDN加速方案:建议采用以下Nginx配置:
location /static/app1/ {alias /var/www/app1/static/;expires 1y;add_header Cache-Control "public";}
通过子目录静态资源部署,结合CDN的缓存策略,可使静态资源加载时间降低至200ms以内。
执行差异化构建命令:
# 应用1构建uni-app build --mode app1 --base /app1/# 应用2构建uni-app build --mode app2 --base /app2/
需确保--base参数与路由配置一致。
Nginx完整配置示例:
server {listen 80;server_name example.com;# 应用1配置location /app1/ {alias /var/www/app1/dist/;try_files $uri $uri/ /app1/index.html;}# 应用2配置location /app2/ {alias /var/www/app2/dist/;try_files $uri $uri/ /app2/index.html;}# API代理配置location /api/app1/ {proxy_pass http://backend1/;}location /api/app2/ {proxy_pass http://backend2/;}}
建议部署以下监控指标:
可通过Prometheus+Grafana搭建监控看板,设置阈值告警。
当出现Uncaught Error: Route "xxx" already exists错误时,需检查:
pages.json是否存在重复路由为实现会话隔离,建议:
// 设置应用专属Cookieuni.setCookie({domain: '.example.com',path: '/app1/',name: 'session_app1',value: 'xxx'});
通过路径级Cookie实现会话隔离。
可采用以下方式实现应用间通信:
通过上述方案,企业可在保持开发效率的同时,显著降低运维成本。实际案例显示,某金融科技公司采用该方案后,服务器资源利用率提升40%,年度IT支出减少65万元。建议开发团队在实施前进行充分的压力测试,确保系统在高并发场景下的稳定性。