
目录
目前前端技术领域已有多种成熟的 微前端 解决方案:
各解决方案对比如下:

在项目主文件 main.js 中采用以下方式注册微应用:
if(!window.__MICRO_APP_ENVIRONMENT__){
microApp.start()
}
// 微应用模式
let app = null
export async function mount (props) {
app = new Vue({
router,
store,
render: h => h(App)
}).$mount('#app');
window.microApp.addDataListener((data) => {
// 当基座下发跳转指令时进行跳转
if (data.path) {
app.$router.push(data.path)
}
},true)
}
// 子应用独立运行时逻辑
export async function mountInChild(props) {
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
}
// 卸载应用
export async function unmount () {
app.$destroy()
app.$el.innerHTML = ''
app = null
}
// 微前端环境下,注册mount和unmount方法
// window.__MICRO_APP_ENVIRONMENT__ 为微应用标识
if (window.__MICRO_APP_ENVIRONMENT__) {
window[`micro-app-${window.__MICRO_APP_NAME__}`] = { mount, unmount }
} else {
// 非微前端环境直接渲染
mountInChild()
}
主应用通过单点登录方式登录,将 token 信息存入
sessionStorage 的 __storejs_pro___ACCESS_TOKEN 中:
// 子应用获取 token
sessionStorage.getItem('__storejs_pro___ACCESS_TOKEN')
2. 微应用 token 过期处理
微应用 token 过期需要做响应拦截,报告主应用 token 过期,报告主应用方法如下:
if(window.__MICRO_APP_ENVIRONMENT__){
window.microApp.dispatch({action:'logout'})
}
主应用接受到微应用的消息,弹出重新登录弹窗,用户点击登录可实现重新登录。
微应用需要设置允许跨域访问主应用才能加载微应用的资源。
需要设置打包配置文件的 devServer 的 headers 属性
headers: {
'Access-Control-Allow-Origin': '*',
},
微应用nginx 需要配置: 'Access-Control-Allow-Origin': '主应用域名' 或者 'Access-Control-Allow-Origin': '*'
微应用nginx 需要配置: 'Access-Control-Allow-Origin': '主应用域名' ,主应用域名
不可为 '*'
微应用nginx需要开启: 'Access-Control-Allow-Credentials':true
微应用接口请求需配置 baseURL: ' 微应用的服务地址 '
微应用接口请求需允许 withCredentials:true
- 发送方
if (window.__MICRO_APP_ENVIRONMENT__) {
window.microApp.setGlobalData( data )
}
if (window.__MICRO_APP_ENVIRONMENT__) {
const data = window.microApp.getGlobalData()
}
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
- 于父框架微前端初始化时注册需要暴露的资源,默认注册位置 main.js
if(!window.__MICRO_APP_ENVIRONMENT__){
microApp.start(
{
globalAssets: {
js: ['https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js'], // js地址
// css: ['css地址1', 'css地址2', ...], // css地址
}
}
)
}
2. 子应用使用父级资源
于入口文件通过 url 方式引入和父框架一样地址的资源。
子应用相同地址的资源匹配到父框架时,便能直接使用父框架的资源,而无需自己加载,起到资源复用的作用。
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
