vue实现分站
Vue 实现分站的方案
在 Vue 中实现分站功能通常涉及路由配置、环境变量管理和动态加载资源。以下是几种常见的实现方式:
基于路由的分站实现
通过 Vue Router 配置多路由,区分不同站点的内容:
const routes = [
{
path: '/site1',
component: () => import('./views/Site1.vue'),
meta: { site: 'site1' }
},
{
path: '/site2',
component: () => import('./views/Site2.vue'),
meta: { site: 'site2' }
}
]
使用路由守卫或全局混入来处理站点特定的逻辑:
router.beforeEach((to, from, next) => {
const site = to.meta.site
// 根据站点加载特定配置
next()
})
基于环境变量的分站配置
通过不同环境变量区分站点:
// .env.site1
VUE_APP_SITE=site1
VUE_APP_API_BASE=/api/site1
// .env.site2
VUE_APP_SITE=site2
VUE_APP_API_BASE=/api/site2
在代码中通过 process.env 访问变量:
const apiUrl = process.env.VUE_APP_API_BASE
动态组件加载
根据当前站点动态加载组件:
<template>
<component :is="currentSiteComponent"/>
</template>
<script>
export default {
computed: {
currentSiteComponent() {
return () => import(`./sites/${this.$site}/Index.vue`)
}
}
}
</script>
微前端架构
对于大型分站系统,可以考虑使用微前端:
// 主应用
import { loadMicroApp } from 'qiankun'
const site1App = loadMicroApp({
name: 'site1',
entry: '//site1.example.com',
container: '#site1-container'
})
多入口打包
配置多个入口文件:
// vue.config.js
module.exports = {
pages: {
site1: {
entry: 'src/sites/site1/main.js',
template: 'public/site1.html'
},
site2: {
entry: 'src/sites/site2/main.js',
template: 'public/site2.html'
}
}
}
样式隔离方案
使用 CSS Modules 或 Scoped CSS 实现样式隔离:
<template>
<div :class="$style.siteWrapper">
<!-- 站点内容 -->
</div>
</template>
<style module>
.siteWrapper {
/* 站点特定样式 */
}
</style>
数据隔离方案
通过 Vuex 模块实现数据隔离:
const store = new Vuex.Store({
modules: {
site1: site1Module,
site2: site2Module
}
})
部署方案
不同站点可以部署到不同子目录或子域名:
// 子目录部署
https://example.com/site1
https://example.com/site2
// 子域名部署
https://site1.example.com
https://site2.example.com
选择具体方案时需考虑项目规模、团队协作需求和部署环境等因素。小型项目可采用路由或环境变量方案,大型系统建议考虑微前端或多入口打包方案。







