Vue.js 多项目同端口部署实战指南(上下文路径配置指南)

 更新时间:2026年02月04日 15:40:58   作者:陶甜也  
上下文路径是指 Web应用在服务器上的部署路径前缀,通过设置不同的上下文路径,多个应用可以共享同一个IP和端口,通过URL路径来区分,本文将从前端Vue.js配置到后端服务器部署,详细介绍完整的实现方案,感兴趣的朋友跟随小编一起看看吧

Vue.js 多项目同端口部署实战:上下文路径配置指南

一、背景与需求

在实际项目开发中,我们经常会遇到这样的需求:

已有的服务器上运行着一个 Vue 项目(主项目),现在需要在不开启新端口的情况下,部署另一个 Vue 项目(如数据大屏、管理后台等),通过不同的路径前缀来区分访问。

例如:

  • 主项目:http://your-domain.com/(已运行)
  • 数据大屏:http://your-domain.com/datav/(需要新增)

这种部署方式称为上下文路径(Context Path)部署。本文将从前端 Vue.js 配置到后端服务器部署,详细介绍完整的实现方案。

二、核心概念:上下文路径

上下文路径是指 Web 应用在服务器上的部署路径前缀。通过设置不同的上下文路径,多个应用可以共享同一个 IP 和端口,通过 URL 路径来区分。

例如:

  • 应用 A 上下文路径:/ → 访问地址:http://domain/
  • 应用 B 上下文路径:/datav → 访问地址:http://domain/datav/
  • 应用 C 上下文路径:/admin → 访问地址:http://domain/admin/

三、前端 Vue.js 配置

1. 配置 Vue Router 基础路径

Vue Router 的 base 配置项用于设置路由的基础路径,所有路由都会自动添加这个前缀。

// src/router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/view/Home.vue'
Vue.use(Router)
const router = new Router({
  mode: 'history', // 必须使用 history 模式
  base: process.env.NODE_ENV === 'production' ? '/datav/' : '/', // 根据环境动态设置
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/dashboard',
      name: 'Dashboard',
      component: () => import('@/view/Dashboard.vue')
    }
  ]
})
export default router

2. 配置 Webpack 资源路径

在 Vue CLI 2.x 中,通过 config/index.jsassetsPublicPath 配置构建后的资源路径:

// config/index.js
module.exports = {
  build: {
    // ...
    // 配置资源的公共访问路径
    assetsPublicPath: '/datav', // 生产环境上下文路径
    // ...
  },
  dev: {
    // ...
    assetsPublicPath: '/', // 开发环境使用根路径
    // ...
  }
}

在 Vue CLI 3+ 中,通过 vue.config.jspublicPath 配置:

// vue.config.js
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '/datav/' : '/',
  // ...
}

3. 正确引用静态资源

避免使用硬编码的绝对路径引用资源,这会导致资源加载失败。

❌ 错误的资源引用方式:

<!-- 硬编码绝对路径 -->
<img src="/static/img/logo.png">
<!-- CSS 中硬编码 -->
background: url(/static/img/background.jpg);

✅ 正确的资源引用方式:

<!-- 相对路径 -->
<img src="./static/img/logo.png">
<!-- 使用 require 方式(推荐) -->
<img :src="require('@/assets/img/logo.png')">
<!-- CSS 中使用相对路径 -->
background: url(../img/background.jpg);

4. API 请求路径处理

确保 API 请求也能正确处理上下文路径:

❌ 错误的请求方式:

// 会请求到 http://domain/api/data,而非 http://domain/datav/api/data
axios.get('/api/data')

✅ 正确的请求方式:

// 方式 1:使用相对路径(推荐)
axios.get('api/data') // 自动带上上下文路径
// 方式 2:动态构建 API 基础路径
const apiBaseUrl = process.env.NODE_ENV === 'production' ? '/datav/api' : '/api'
axios.get(`${apiBaseUrl}/data`)
// 方式 3:配置 axios 基础路径
axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? '/datav/api' : '/api'
axios.get('/data')

四、后端服务器配置

前端配置完成后,后端服务器需要支持 URL 重写,确保上下文路径下的路由能正确指向对应的项目。

1. Nginx 配置示例

server {
    listen 80;
    server_name your-domain.com;
    # 主项目配置(上下文路径:/)
    location / {
        root /path/to/main-project/dist;
        index index.html;
        try_files $uri $uri/ /index.html; # 处理 Vue history 模式
    }
    # 数据大屏项目配置(上下文路径:/datav)
    location /datav {
        alias /path/to/dashboard-project/dist;
        index index.html;
        try_files $uri $uri/ /datav/index.html; # 注意包含上下文路径的重写
    }
}

2. Apache 配置示例

<VirtualHost *:80>
    ServerName your-domain.com
    # 主项目配置
    DocumentRoot /path/to/main-project/dist
    <Directory /path/to/main-project/dist>
        AllowOverride All
        Require all granted
        RewriteEngine On
        RewriteRule ^index\.html$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.html [L]
    </Directory>
    # 数据大屏项目配置
    Alias /datav /path/to/dashboard-project/dist
    <Directory /path/to/dashboard-project/dist>
        AllowOverride All
        Require all granted
        RewriteEngine On
        RewriteBase /datav/
        RewriteRule ^index\.html$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /datav/index.html [L]
    </Directory>
</VirtualHost>

五、部署与验证

1. 构建项目

# 构建生产版本
npm run build

2. 部署到服务器

将构建生成的 dist 目录上传到服务器的指定位置(与服务器配置中的路径一致)。

3. 验证访问

  • 访问主项目:http://your-domain.com/
  • 访问数据大屏:http://your-domain.com/datav/
  • 验证路由跳转:http://your-domain.com/datav/dashboard
  • 验证资源加载:检查页面元素和网络请求,确保资源都能正确加载

六、常见问题与排查

1. 404 错误(页面刷新或直接访问路由)

原因:服务器没有正确配置 URL 重写规则。
解决:检查服务器配置中的 try_files(Nginx)或 RewriteRule(Apache)是否正确。

2. 静态资源加载失败(CSS/JS/图片)

原因:资源引用路径错误或 assetsPublicPath 配置不当。
解决:确保 assetsPublicPath 与上下文路径一致,避免硬编码绝对路径。

3. API 请求 404

原因:API 请求路径没有包含上下文路径。
解决:使用相对路径或动态构建 API 基础路径。

4. 路由跳转错误

原因:Vue Router 的 base 配置与实际上下文路径不匹配。
解决:确保 base 配置与服务器部署的上下文路径一致。

七、最佳实践

  • 开发与生产环境分离:使用环境变量动态配置上下文路径,便于本地开发和线上部署。
  • 避免硬编码:所有资源路径和 API 请求都使用相对路径或动态构建,避免硬编码绝对路径。
  • 统一上下文路径:前端的 base 配置和后端的服务器配置必须使用相同的上下文路径。
  • 使用 Vue CLI 3+:新版本的 Vue CLI 提供了更简洁的配置方式,减少配置错误。
  • 测试完整流程:部署后测试所有路由、资源加载和 API 请求,确保完整功能正常。

八、总结

通过上下文路径配置,我们可以在不开启新端口的情况下,在同一服务器上部署多个 Vue 项目。关键在于:

  1. 前端:正确配置 Vue Router 的 base 和 Webpack 的资源路径。
  2. 后端:配置服务器的 URL 重写规则,支持上下文路径。

这种部署方式不仅节省了服务器资源,还便于统一管理和维护多个相关项目。希望本文能帮助你顺利完成多项目同端口部署任务!

到此这篇关于Vue.js 多项目同端口部署实战指南(上下文路径配置指南)的文章就介绍到这了,更多相关vue.js多项目同端口部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue项目webpack中Npm传递参数配置不同域名接口

    vue项目webpack中Npm传递参数配置不同域名接口

    这篇文章主要介绍了vue项目webpack中Npm传递参数配置不同域名接口,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • vue electron实现无边框窗口示例详解

    vue electron实现无边框窗口示例详解

    这篇文章主要为大家介绍了vue electron实现无边框窗口示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Vue页面跳转动画效果的实现方法

    Vue页面跳转动画效果的实现方法

    百度了好久都没办法实现vue中一个页面跳到另一个页面,甚至到google上搜索也是没办法的,最终还是找了高人亲自指导,所以下面这篇文章主要给大家介绍了关于Vue页面跳转动画效果的实现方法,需要的朋友可以参考下
    2018-09-09
  • Vue中key的作用及原理详解

    Vue中key的作用及原理详解

    本文主要介绍了Vue3中key的作用和工作原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Vue3之事件绑定的实现逻辑详解

    Vue3之事件绑定的实现逻辑详解

    这篇文章主要介绍了Vue3之事件绑定的实现逻辑,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue-cli4如何打包静态资源到指定目录

    vue-cli4如何打包静态资源到指定目录

    这篇文章主要介绍了vue-cli4打包静态资源到指定目录方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue通过elementUI组件实现图片预览效果

    vue通过elementUI组件实现图片预览效果

    我们在开发中经常会遇到通过点击某个按钮或者文字实现图片的预览功能,这里我们分别介绍vue2和vue3里面如何实现图片预览方法,需要的朋友可以参考下
    2023-09-09
  • 使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析

    使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析

    这篇文章主要介绍了用vue官方提供的模板vue-cli搭建一个helloWorld案例,需要的朋友可以参考下
    2018-01-01
  • vue中的端口号如何改修

    vue中的端口号如何改修

    文章介绍了两种在Vue项目中修改端口号的方法:一种是在`webpack.config.js`或`vue.config.js`中配置`devServer`,另一种是修改`package.json`中的`scripts`属性,在`serve`或`dev`命令后加上`--port`指定端口号
    2026-01-01
  • Vue3结合TypeScript项目开发实践总结

    Vue3结合TypeScript项目开发实践总结

    本文主要介绍了Vue3结合TypeScript项目开发实践总结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论