微前端搭建子项目踩得坑(子应用挂载后容器不存在问题)
基于阿里的qiankun 框架搭建的微前端1.先搭建主项目先安装qiankun框架官网https://qiankun.umijs.org/zh/guidecnpm i qiankun -S1.在入口文件main.js添加配置import { registerMicroApps, start } from 'qiankun'const apps = [{name: 'vueApp', // 子应用的
·
基于阿里的qiankun 框架搭建的微前端
1.先搭建主项目
先安装qiankun框架 官网https://qiankun.umijs.org/zh/guide
cnpm i qiankun -S
1.在入口文件main.js添加配置
import { registerMicroApps, start } from 'qiankun'
const apps = [
{
name: 'vueApp', // 子应用的名称
entry: '//localhost:9000', // 子应用的入口
container: '#vue', // 子应用展示的容器
activeRule: '/vue', // 子应用的router
props: { a: 1 } // 父应用向子应用传递参数
}
]
registerMicroApps(apps)
start({ prefetch: false, strictStyleIsolation: true })
// strictStyleIsolation css沙箱配置, prefetch 预加载配置
2.在布局layout文件下添加子应用容器
<el-menu :default-active="activeIndex" mode="horizontal" router>
<el-menu-item index="/">基础的</el-menu-item>
<el-menu-item index="/vue">vue</el-menu-item>
</el-menu>
<router-view/>
<div id="vue"></div>
2.子应用配置
1.使用qiankun,主应用必须接受三个函数,在main.js里面添加,并且判断是独立运行还是在主项目中引用
let instance = null
const render = (props) => {
instance = new Vue({
router,
render: h => h(App)
}).$mount('#vue-app');
}
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__
}
if (!window.__POWERED_BY_QIANKUN__) { // 默认独立运行
render();
}
// 子组件的协议就ok了
export async function bootstrap(props) {
};
export async function mount(props) {
console.log(props)
render(props)
}
export async function unmount(props) {
instance.$destroy();
}
2.路由里面添加前缀
const router = new VueRouter({
mode: 'history',
base: window.__POWERED_BY_QIANKUN__ ? "/vue" : "/",
routes
})
3.配置文件vue.config.js添加容许跨域配置headers
module.exports = {
devServer: {
port: 9000,
headers: {
'Access-Control-Allow-Origin': '*'
}
},
configureWebpack: {
output: {
library: 'vueApp',
libraryTarget: 'umd',
jsonpFunction: `webpackJsonp_vueApp`,
}
}
}
到此基本的项目已经搭建完成了,但是我在项目中遇到一个重要的坑就是,点击vue
包承载子项么的容器丢失
重点(坑)
原因是因为主项目和子项目都是用id为app,造成子项目直接挂在在app上,导致主项目里面承载子项目的容器丢失,此时应当改子项目的id
// app.vue
<div id="vue-app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<div>header</div>
<div>第一次提交</div>
<router-view/>
</div>
// index.html
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="vue-app"></div>
到此就没有了,后面有遇到再补充
更多推荐
已为社区贡献4条内容
所有评论(0)