|公司前端代码,俺很懂( 二 )
//子应用盒子
5、最后将init.js在main.js引入
import startQiankun from './qiankun/init/index' let app = null async function render({ appContent, loading } = {}) { if (!app) { await ReadConfig(Vue)//加载配置文件 app = new Vue({ router, store, i18n, render: h => h(App), }).$mount('#app') } else { // app.content = appContent; // app.loading = loading; console.log(loading, appContent) } } render() startQiankun()构建子应用
1、使用vue脚手架初始化项目
2、在main.js中加入:
let router = null; let instance = null; if (window.__POWERED_BY_QIANKUN__) { //处理资源 __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__; } //下面的 /admin与主应用registerMicroApps 中的activeRule 字段对应 function render(props = {}) { const {container} = props router = new VueRouter({ base: window.__POWERED_BY_QIANKUN__ ? '/admin' : '/', mode: 'history', routes, }); const create = async () => { // await ReadConfig(Vue) instance = new Vue({ router, render: h => h(App), }).$mount(container ? container.querySelector('#app') : '#app'); } create() } if (!window.__POWERED_BY_QIANKUN__) {//判断是否在qiankun环境下 render(); } // 导出子应用生命周期 挂载前 export async function bootstrap(props) { console.log('[vue] vue app bootstraped'); } export async function mount(props) {// 导出子应用生命周期 挂载前 挂载后 render(props); }// 导出子应用生命周期 挂载前 卸载后 export async function unmount() { instance.$destroy(); instance = null; router = null; }3、创建vue.config.js文件,需要做一些打包配置 。
const path = require('path'); const packageName = require('./package').name; function resolve(dir) { return path.join(__dirname, dir); } const dev = process.env.NODE_ENV === 'development' const port = 9528; // dev port module.exports = { publicPath: dev ? `//localhost:${port}` : '/', outputDir: 'dist', assetsDir: 'static', filenameHashing: true, devServer: { hot: true, historyApiFallback: true, port, overlay: { warnings: false, errors: true, }, headers: { 'Access-Control-Allow-Origin': '*', }, }, // 自定义webpack配置 configureWebpack: { resolve: { alias: { '@': resolve('src'), }, }, output: {// 把子应用打包成 umd 库格式 library: `${packageName}-[name]`, libraryTarget: 'umd', jsonpFunction: `webpackJsonp_${packageName}`, globalObject: 'this', }, }, };2、微前端解决的问题
自此 , 一个父子前端微应用搭建成功 , 当然这只是简单的vue实现 , 真正复杂的是一个项目中每个模块使用不同的前端框架 。 效果如下:
本文插图
我们可以看到A模块、B模块和C模块三个微应用分别运行在Vue、React和Angular的环境中 , 而主应用主要提供了NavBar和SideBar的界面 。 中心是微应用中组件显示的界面 。
我们从图中可以看出将前端微服务化后解决了什么问题:
1、当A模块需要维护时 , 只需要动A模块的代码 , 维护完成之后对A项目进行构建发布 , 由于体积很小 , 构建发布就很快 。
2、当A项目构建发布时 , 其他应用运行正常 , 避免了之前单体应用构建发布导致整个前端项目无法访问 。
3、主应用可以捕捉到子应用的运行状态 , 如果子应用出现异常或者挂掉 , 可以对用户进行友好提示 。 例如当A模块挂掉后 , 用户点击其功能一将提示“功能正在维护中” 。
推荐阅读
- 人工智能|马斯克宣布,脑机接口公司将在下月重磅更新,赛博格将成为现实?
- 北京|北京嘀嘀无限科技发展有限公司因涉嫌非法聘用外国人被行政处罚
- |防止删库悲剧发生,这里有个Bash脚本测试框架,危险代码一测便知
- 携程|携程在天津成立融资担保新公司,注册资本3000万元
- 肯德基|肯德基又一重磅力作!与3D生物打印公司合作 尝试生产更环保鸡块
- 科技|字节跳动旗下公司入股塔读文学 成第三大股东
- 海外网|加拿大华人新创金融科技公司推出智能财税软件APP
- 公司|中登集团学习群:公司请你来做什么
- 大话猩猩|四次换帅都“救”不回来的公司?网友:都是名字惹的祸
- 行业互联网|英国病急乱投医,请求日本公司为其建立5G网络以替代华为产品