IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:10:55  更:2021-12-15 18:13:13 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码