文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue+qiankun项目如何搭建

2023-07-05 08:20

关注

这篇文章主要介绍了vue+qiankun项目如何搭建的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue+qiankun项目如何搭建文章都会有所收获,下面我们一起来看看吧。

一、cli3构建vue2项目

前期工作:查看cli安装情况与安装

npm install -g @vue/cli

已安装情况查看:vue -V(大写的V)

vue+qiankun项目如何搭建

新建项目

vue create main-project

选择自定义配置

vue+qiankun项目如何搭建

配置选择

选择vue版本、babel、router、vuex、css预处理器、lint格式校验

vue+qiankun项目如何搭建

选择vue 2.x

vue+qiankun项目如何搭建

qiankun 子应用建议使用 history路由模式 

vue+qiankun项目如何搭建

 选择自己喜欢的css预处理器

vue+qiankun项目如何搭建

选择eslint标准配置

vue+qiankun项目如何搭建

提交保存eslint都需要验证 

vue+qiankun项目如何搭建

单独的配置文件

vue+qiankun项目如何搭建

不保存这个配置 

vue+qiankun项目如何搭建

项目创建成功

vue+qiankun项目如何搭建

自己喜欢的eslint配置eslintrc.js 

module.exports = {    root: true,    env: {            node: true    },    extends: [        'plugin:vue/essential',        '@vue/standard'    ],    parserOptions: {        parser: 'babel-eslint'    },    rules: {        'semi': 'off',        'quotes': 'off',        'indent': ["error", 4],        "space-before-function-paren": "off",        'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',        'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'    }}

进入项目文件夹内 cd frame安装插件

安装依赖的插件 element ui、 axios

安装element ui:

npm i element-ui -S

vue+qiankun项目如何搭建

安装完成后修改main.js

import Vue from 'vue'import ElementUI from 'element-ui'import 'element-ui/lib/theme-chalk/index.css'import App from './App.vue'import router from './router'import store from './store' Vue.use(ElementUI) Vue.config.productionTip = false new Vue({  router,  store,  render: h => h(App)}).$mount('#app')

vue+qiankun项目如何搭建

安装axios:

npm install axios

新建了个文件夹api index.js 引用axios,统一处理api与使用qiankun与此无关

import Axios from 'axios'

到此只是建项目,两个项目一个main-project 和sub-project

主应用 main-project:

vue+qiankun项目如何搭建

子应用 sub-project:

vue+qiankun项目如何搭建

二、qiankun改造主应用

主应用安装qiankun

npm install qiankun --save

给菜单增加一个router-link,to值为"/subProject",并且在router-view的下面增加一个id为VueContainer的盒子,用于承载子应用。

vue+qiankun项目如何搭建

新增一个qiankun文件夹里面加个index.js。导入qiankun中的registerMicroApps和star两个方法,注册子应用并启动qiankun

import { registerMicroApps, start } from "qiankun"; export const useQiankun = () => {    const apps = [        {            name: "sub-project",            entry: "http://localhost:8091", // 主应用端口用8090,子应用8091            container: "#VueContainer",            activeRule: "/subProject", // 与route-link to的相同            props: {                msg: "这是父应用传过来的值,传递给子应用sub-project"            }        }    ]     registerMicroApps(apps, {        beforeLoad: [            (app) => {                console.log(`${app.name}的beforeLoad`);            }        ],        beforeMount: [            (app) => {                console.log(`${app.name}的beforeMount`);            }        ],        afterMount: [            (app) => {                console.log(`${app.name}的afterMount`);            }        ],        beforeUnmount: [            (app) => {                console.log(`${app.name}的beforeUnmount`);            }        ],        afterUnmount: [            (app) => {                console.log(`${app.name}的afterUnmount`);            }        ]    });     start({ experimentalStyleIsolation: true, prefetch: "all" });};

vue+qiankun项目如何搭建

在main.js里 导入 qiankun/index, 注册子应用并启动

import { useQiankun } from './qiankun/index'     vueApp.$nextTick(() => {    useQiankun()})

vue+qiankun项目如何搭建

三、qiankun改造子应用

主应用安装qiankun

npm install qiankun --save

先修改一下vue实例挂载的id,#app改为subApp便于区分

vue+qiankun项目如何搭建

在src中增加一个文件夹qiankun,public-path.js,判断window.__ POWERED_BY_QIANKUN __,如果是从qiankun启动则将window. __ INJECTED_PUBLIC_PATH_BY_QIANKUN __ 的值赋值给 __ webpack_public_path __ 

if (window.__POWERED_BY_QIANKUN__) {  // eslint-disable-next-line camelcase, no-undef  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__}

vue+qiankun项目如何搭建

 4、router/index.js改造,创造vue实例移入main.js

vue+qiankun项目如何搭建

main.js 导入VueRouter、routes、 public-path移除原来的router

import "./public-path";import VueRouter from "vue-router";import routes from "./router";

main.js中创建vue实例的代码提到render函数里,并接收一个参数,

router实例也放入render函数,修改router/index.js,process.env.BASE_URL,指定base值为:“/subProject”

判断public-path的window.__POWERED_BY_QIANKUN__如果不是从qiankun启动,直接调用render表示独立运行

let instancelet routerfunction render(props = {}) {    const { container } = props;    router = new VueRouter({        mode: "history",        base: "/subProject",        routes    });    instance = new Vue({        router,        store,        render: (h) => h(App)    }).$mount(container ? container.querySelector("#subApp") : "#subApp");}// 如果不是从qiankun启动,直接调用render表示独立运行if (!window.__POWERED_BY_QIANKUN__) {    render();}

main.js 导出3个必需的方法bootstrap,mount和unmount;mount函数中调用render方法进行子应用渲染。unmount函数中将render方法中创建的vue实例销毁。

export async function bootstrap() {    console.log("[vue] vue bapp bootstraped");}export async function mount(props) {    console.log("[vue] props from main framework", props);    render(props);}export async function unmount() {    instance.$destroy();    instance.$el.innerHTML = "";    instance = null;    router = null;}

整体的main.js

import "./qiankun/public-path";import Vue from "vue";import VueRouter from "vue-router";import ElementUI from "element-ui";import "element-ui/lib/theme-chalk/index.css";import "./assets/main.css";import App from "./App.vue";import routes from "./router";import store from "./store"; Vue.use(ElementUI); Vue.config.productionTip = false; let instancelet routerfunction render(props = {}) {    const { container } = props;    router = new VueRouter({        mode: "history",        base: "/subProject",        routes    });    instance = new Vue({        router,        store,        render: (h) => h(App)    }).$mount(container ? container.querySelector("#subApp") : "#subApp");}// 如果不是从qiankun启动,直接调用render表示独立运行if (!window.__POWERED_BY_QIANKUN__) {    render();} export async function bootstrap() {    console.log("[vue] vue bapp bootstraped");}export async function mount(props) {    console.log("[vue] props from main framework", props);    render(props);}export async function unmount() {    instance.$destroy();    instance.$el.innerHTML = "";    instance = null;    router = null;}

增加vue.config.js,

配置允许跨域:“ Access-Control-Allow-Origin:’*’ ”,并配置webpack的output.library和output.libraryTarget

const { name } = require('./package');module.exports = {    productionSourceMap: false,    lintOnSave: process.env.NODE_ENV === 'development',    devServer: {        proxy: {            "/cmp": {                target: "https://11.11.9.206:8080",                ws: true,                changeOrigin: true,                secure: false                // pathRewrite: { "^/cmp/api": "" }            }        },        headers: {            'Access-Control-Allow-Origin': '*'        }    },    configureWebpack: {        name: name,        output: {            library: `${name}-[name]`,            libraryTarget: 'umd', // 把微应用打包成 umd 库格式            jsonpFunction: `webpackJsonp_${name}`        }    }};

 6、最终样子       

vue+qiankun项目如何搭建

关于“vue+qiankun项目如何搭建”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“vue+qiankun项目如何搭建”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯