昨天新建了两个项目,上手体验了一下微前端乾坤,感觉很神奇,但官网教程似乎对新手不大友好,上手完以后感觉很简单,但中间过程实在繁琐,各种报错和百度,今天上班摸鱼,记录一下全部过程,方便日后操作。

1、乾坤主应用。

①使用vue脚手架新建一个vue项目,重点是添加vue-router
②安装乾坤依赖
$ yarn add qiankun # 或者 npm i qiankun -S
③在main.js中注册微应用并启动,完整代码为

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import { registerMicroApps, start } from "qiankun";Vue.config.productionTip = false;new Vue({router,store,render: (h) => h(App),
}).$mount("#app");
// 在主应用中注册子应用
registerMicroApps([{name: "vueApp", //子应用名称entry: "//localhost:8091", //子应用启动的地址container: "#container", // 子应用在主应用的容器名称activeRule: "/app-vue", // 路由地址props: {data: "child子应用",}, //传参},
]);
// 启动
start();

④配置主应用跨域,在项目根目录下创建vue.config.js文件,并添加如下代码

module.exports = {devServer: {port: 8090, //主应用启动端口号,视情况而定headers: {"Access-Control-Allow-Origin": "*", // 允许跨域访问子应用页面},},
};

⑤新建父页面,在src/components文件夹下新建父页面,Father.vue,代码及文件位置如下图所示

⑥配置路由,打开src/router文件夹下的index.js文件,配置Father页面的路由,完整代码如下图所示

import Vue from "vue";
import VueRouter from "vue-router";Vue.use(VueRouter);const routes = [{path: "/",redirect: "/father",},{path: "/father",name: "Father",component: () => import("@/components/Father"),},
];const router = new VueRouter({mode: "history",routes,
});export default router;

⑦配置App.vue,仅修改HTML部分代码即可,代码如下

<div id="app"><span><router-link to="/">点击跳转到父页面</router-link></span><span><router-link to="/app-vue">点击跳转到子页面</router-link></span><router-view /><div id="container"><!-- 子应用位置 --></div></div>

至此,主应用配置完毕

2. 乾坤子应用

①使用vue脚手架新建一个vue项目,重点是添加vue-router
②在src文件夹下新建public-path.js文件,并添加如下代码

if (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

注意:大多数项目此时会报错,webpack_public_path 未定义,这是因为EsLint的检测机制,所以我们需要在package.json中的eslintConfig中进行如下配置

"eslintConfig": {......"globals": {"__webpack_public_path__": true}},

③修改main.js代码,完成代码如下

import "./public-path";
import Vue from "vue";
import App from "./App.vue";
import router from "./router";Vue.config.productionTip = false;let instance = null;
function render(props = {}) {const { container } = props;instance = new Vue({router,render: (h) => h(App),}).$mount(container ? container.querySelector("#app-vue") : "#app-vue");
}// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {render();
}export async function bootstrap() {console.log("[vue] vue app 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;
}new Vue({router,render: (h) => h(App),
}).$mount("#app-vue");

这里和官网文档差距很大,原因主要在

import router from "./router";

官网文档这里为

import routes from "./router";

router改为routes后,会各种报错,没有解决掉。
还有要注意的是我这里修改了#app#app-vue,原因为#app在主应用中已使用,会冲突,所以对应的index.html与App.vue中也应当修改为#app-vue
④配置子应用跨域,在项目根目录下创建vue.config.js文件,并添加如下代码

const { name } = require("./package");
module.exports = {devServer: {port: 8091, //子应用启动端口号,不可随意修改,与上文中父应用注册的子应用端口号对应headers: {"Access-Control-Allow-Origin": "*", //循序跨域},},configureWebpack: {output: {library: `${name}-[name]`,libraryTarget: "umd", // 把微应用打包成 umd 库格式jsonpFunction: `webpackJsonp_${name}`,},},
};

⑤配置路由,打开src/router文件夹下的index.js文件,将以下代码

const router = new VueRouter({routes,
});

修改为

const router = new VueRouter({// 这里和主应用中注册子应用时的activeRule对应base: window.__POWERED_BY_QIANKUN__ ? "/app-vue" : "/", mode: "history",routes,
});

⑥配置App.vue,仅修改HTML部分代码即可,代码如下

<template><div id="app-vue">我是子应用</div>
</template>

注意,这里的id对应了main.js中的名称,不要再使用id="app",记得同步修改index.html中的id
到这里全部配置已结束,启动主应用与子应用,启动后效果图如下:

完结撒花,感谢阅读。

微前端—乾坤 初体验相关推荐

  1. 微前端乾坤js react实践

    微前端乾坤js实践 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略.解耦团队之间的龚和渡,解耦技术栈的龚和渡,节省团队间沟通成本,解决技术栈之间无法业务打 ...

  2. 微前端-乾坤qiankun

    2019-2020年前端最火的技术之一:微前端 微前端究竟是什么? 微前端是近三年前端社区比较火的技术方案,试图把拆分大型后端系统的一些益处引入前端. 微前端就是将不同的功能按照不同的维度拆分成多个子 ...

  3. 微前端——乾坤qiankun Demo

    微前端--qiankun(乾坤)实例 一.什么是微前端 微前端就是将不同的功能按照不同的维度拆分成多个子应用.通过主应用来加载这些子应用.微前端的核心在于拆,拆完后在合! 二.为什么使用微前端 不同团 ...

  4. 微前端 乾坤_嚯!敏思达“六脉神剑”里竟然大有乾坤!

    "智能+"物流时代,随着综合物流产业边界的模糊化,物流企业服务领域拓展越广,市场竞争力就越强.全链路的物流服务成为趋势,从简单的物品传输到信息互联互通.终端集约共享,需要企业具备综 ...

  5. 使用 Piral 创建微前端

    三年多一点前,我在 LogRocket 的一篇博文中揭示了通过某种发现机制形成微前端的想法,驯服前端单体.发现机制(称为提要服务)是我参与的解决方案的核心. 那个解决方案就是 Piral,我们在半年后 ...

  6. 前端 - 用微前端前应该了解的一些知识点

    一.微前端 微前端(Micro-Frontends)是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用.微前端不是单纯的前 ...

  7. 乾坤 微前端_微前端架构初探以及我的前端技术盘点

    前言 最近几年微前端一直是前端界的热门议题, 它类似于微服务架构, 主要面向于浏览器端,能将一个复杂而庞大的单体应用拆分为多个功能模块清晰且独立的子应用,且共同服于务同一个主应用.各个子应用可以独立运 ...

  8. 乾坤 微前端_最全汇总之微前端知识和实战(EMP技术方案)

    我们团队在早早聊的B站直播间分享了EMP微前端---团队半年以来的技术果实.分享的内容全在这里,会讲述微前端的由来,解决的问题,以及EMP微前端方案的不同之处,更有四个实战项目的总结,欢迎大家一起探讨 ...

  9. 乾坤 微前端_前端优秀资源整理(持续更新~)

    入门必备 developer-roadmap: 超级全的2020年前端学习路线 freeCodeCamp: 一步一步在线引导学习, 有很多开源的课程和代码 职场必备 front-end-intervi ...

最新文章

  1. 特征工程(feature engineering)是什么?特征工程(feature engineering)包含哪些方面?
  2. mysql sae_新浪SAE的mysql与百度SAE的代码区别?
  3. linux tar 提示 time stamp xxx in the future 解决方法
  4. android x86 vulkan,【图片】预告贴,准备同步AndroidIA源码,貌似支持Vulkan【androidx86吧】_百度贴吧...
  5. Javascript数字前补零的功能
  6. 拐点已至,云原生引领数字化转型升级
  7. tomcat安装启动配置
  8. [x-means] 1.x-means简介
  9. 视频格式转换(avi、wmv、flv、mkv、rmvb、rm、3gp转MP4、MP3)边学边开发
  10. android x86玩和平精英,和平精英iOS和安卓可以一起玩吗 和平精英iOS和安卓数据互通吗...
  11. HG30A-3多用表校验仪
  12. oracle中字符串长度计算,根据 oracle 标准计算超长字符串的长度
  13. Chrome调试工具使用及waterfall含义详解
  14. Congestion 问题怎么解决?
  15. 怎样一次性删掉word或wps文档里的空格行
  16. 漫画人物头像总是画不好?快看看这些注意点你有没有中招!
  17. 360卫士锁定IE主页之更换主页
  18. jdjjsjsjhfshafhiehf
  19. 1.Makefile文件是什么?
  20. 骨传导原理是什么?骨传导耳机的利弊

热门文章

  1. 创乐博机器人树莓派4B
  2. mysql——如何解决事务未提交导致锁等待
  3. 基金A类和C类到底买哪个划算?
  4. Java提高篇(三四)-----fail-fast机制
  5. 【Unity】ios平台导出Xoce项目打包成ipa过程(图文详尽版)
  6. MYSQL 10055错误解决方法
  7. 使用plsql连接远程服务器oracle
  8. insmod nbd.ko 报错‘Invalid module format‘ 处理方法
  9. S7-200 PLC和组态王组态温度PID控制加热炉电阻炉
  10. Nordic DFU 使用教程