| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vue-qiankun微前端 -> 正文阅读 |
|
[JavaScript知识库]vue-qiankun微前端 |
官网:?https://qiankun.umijs.org/zh 首先 主应用yarn add qiankun? ??或者? ?npm i qiankun -S然后 主应用main.js注册子应用import { registerMicroApps, start } from 'qiankun'; registerMicroApps([{ name: 'vueDome',?// 子应用名称 entry: '//localhost:8081', // 子应用服务(改成自己的) container: '#vueDome',? // 这里需要与App.vue里边新建dom的id一样 activeRule: '/#/vue-dome', //?本项目路由没有采用history模式 }]); // 启动 qiankun start(); ?主应用App.vue 新建div用来存放子应用(id需与上述注册内container的value一样) ?子应用子应用main.js 先暴露三个生命周期 import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' Vue.config.productionTip = false let instance = null function render({ container, parentStore } = {}) { instance = new Vue({ router, store, data() { return { parentStore } }, render: h => h(App) }).$mount(container ? container.querySelector('#vueDome') : '#vueDome') // 这里的id,应与 index.html 里边的 id 保持一致,不然无法找到 (index.html内id不能与主项目index.html相同[app],这里边id我改为vueDome) } if (window.__POWERED_BY_QIANKUN__) { __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__; } if (!window.__POWERED_BY_QIANKUN__) { // 全局变量来判断环境 render() } /** * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。 * 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。 */ export async function bootstrap() { console.log('子应用bootstrap阶段') } /** * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法 */ export async function mount(props) { console.log('现在进入子应用的mount周期', props) render(props) } /** * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例 */ export async function unmount() { console.log('现在进入子应用的unmount阶段') instance.$destroy() instance.$el.innerHTML = '' instance = null } /** * 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效 */ export async function update(props) { console.log('子应用update props', props) } ? ? 接下来 把路由 加一点判断?window.__POWERED_BY_QIANKUN__ 这个是qiankun用来判断是否是通过qiankun来进入的应用 import Vue from 'vue' import VueRouter from 'vue-router' import Home from '../views/Home.vue' const Path = window.__POWERED_BY_QIANKUN__ ? '/vue-dome' : '' Vue.use(VueRouter) const routes = [ { path: Path === '' ? '/' : Path, name: 'Home', component: Home }, { path: Path + '/about', name: 'About', component: function () { return import(/* webpackChunkName: "about" */ '../views/About.vue') }}] const router = new VueRouter({ routes }) if (window.__POWERED_BY_QIANKUN__) { // 路由全局守卫 router.beforeEach((to, from, next) => { // 判断要跳转的路由是否带 /vue-dome if (!to.path.includes("/vue-dome")) { // 判断是否要回主项目 / 是要回主项目 如果是要回主项目直接放行 if(to.path === '/') return next() // 不是要回主项目 就拼接/vue-dome后 next next({path: "/vue-dome" + to.path}) } else { next() } })} export default router 然后 再把index.html的id再改一下,与main.js内相同(但是切记不可再为 app 因为与主项目冲突)?最后把 vue.config.js 配置一下'use strict' const path = require('path') function resolve (dir) { return path.join(__dirname, dir) } const port = 8080 // 端口配置 const name = 'main-app' module.exports = { // hash 模式下可使用 publicPath: process.env.NODE_ENV === 'development' ? '/' : '/main-app/', outputDir: 'dist', assetsDir: 'static', lintOnSave: process.env.NODE_ENV === 'development', productionSourceMap: false, devServer: { port: port, open: false, // 启动项目以后自动打开浏览器 hot: true, // 模块热替换(HMR - hot module replacement)功能会在应用程序运行过程中,替换、添加或删除 模块,而无需重新加载整个页面。主要是通过以下几种方式,来显著加快开发速度 hotOnly: false, // hot 和 hotOnly 的区别是在某些模块不支持热更新的情况下,前者会自动刷新页面,后者不会刷新页面,而是在控制台输出热更新失败 overlay: { warnings: false, errors: true }, proxy: { '/auth': { target: 'http://192.168.13.157:8199', changeOrigin: true, pathRewrite: { '^/auth': 'auth' }}}}, configureWebpack: { name: name, resolve: { alias: { '@': resolve('src') }}}} ?这样就完成了,弄的不好 望各位大佬见谅,如有不足欢迎补充,谢谢!? ? |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:26:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |