在 Vue Router 4 中,如何设置base参数

在 Vue Router 4 中,base参数应该设置在 createWebHistory()函数中。以下是完整的设置方法:

1. 基本设置

复制代码
import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory('/your-base-path/'),  // 在这里设置 base
  routes,
})

2. 不同场景的配置

场景一:部署在子目录

复制代码
// 例如:https://example.com/admin/
const router = createRouter({
  history: createWebHistory('/admin/'),
  routes,
})

场景二:部署在根目录

复制代码
// 默认部署在根目录
const router = createRouter({
  history: createWebHistory(),  // 不传参数,默认为根目录
  // 或者显式指定
  history: createWebHistory('/'),
  routes,
})

场景三:动态配置(推荐)

复制代码
// 使用环境变量
const base = import.meta.env.BASE_URL || '/'

const router = createRouter({
  history: createWebHistory(base),
  routes,
})

3. 配合构建工具的配置

使用 Vite

复制代码
// vite.config.js
export default defineConfig({
  base: '/my-app/',  // 这里设置构建时的 base
  // ...
})

// router/index.js
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes,
})

使用 Vue CLI

复制代码
// vue.config.js
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' 
    ? '/production-sub-path/' 
    : '/'
}

// router/index.js
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
})

4. 完整示例

复制代码
import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About },
]

// 如果应用部署在 https://example.com/my-app/
const router = createRouter({
  history: createWebHistory('/my-app/'),
  routes,
})

export default router

注意事项

  1. base 必须以斜杠开头和结尾

    复制代码
    // 正确
    createWebHistory('/my-app/')
    
    // 错误
    createWebHistory('my-app')
    createWebHistory('/my-app')
  2. 实际访问 URL

    • 设置 base: '/my-app/'

    • /about路由的实际访问 URL 是:https://example.com/my-app/about

  3. 开发环境和生产环境

    • 开发环境通常使用 /

    • 生产环境根据实际部署路径设置

  4. 服务器配置

    • 需要确保服务器正确配置,将所有路由重定向到 index.html

选择最适合你项目部署场景的配置方式即可。

相关推荐
陈随易18 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
冰暮流星18 小时前
javascript之事件代理/事件委托
前端
@yanyu66619 小时前
登录注册功能-明文
vue.js·springboot
陈随易19 小时前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
里欧跑得慢21 小时前
17. Flutter Hero动画实现:让界面过渡更加优雅
前端·css·flutter·web
IT_陈寒1 天前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
cn_mengbei1 天前
用React Native开发OpenHarmony应用:Reanimated共享元素过渡
javascript·react native·react.js
kyriewen1 天前
前端测试:别为了100%覆盖率而写测试,那是自欺欺人
前端·javascript·单元测试
去伪存真1 天前
我自己写的第一个skills--project-core-standards
前端·agent
Data_Journal1 天前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库