其他分享
首页 > 其他分享> > 微前端框架qiankun应用及部署

微前端框架qiankun应用及部署

作者:互联网

主应用

1. 安装 qiankun

$ yarn add qiankun # 或者 npm i qiankun -S

2. 在主应用中注册微应用

main.js

import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'qiankun-children', //子应用name 和 子应用package.json里"name": "qiankun-children"一致
    entry: '//localhost:8081',
    container: '#yourContainer',
    activeRule: '/dome1',//当配置为字符串时会直接跟 url 中的路径部分做前缀匹配,匹配成功表明当前应用会被激活,子应用router.js base: window.__POWERED_BY_QIANKUN__ ? '/dome1' : '/',
  },
]);

if (!window.qiankunStarted) {
  window.qiankunStarted = true;
  setTimeout(()=>{
    start(
        sandbox: {    //样式隔离
          strictStyleIsolation: true
        }
    );
  },2000)
}

vue.config.js 允许跨域处理


  devServer: {
    port: 8008,
    headers: {
      'Access-Control-Allow-Origin': '*',
    },
    overlay: {
      warning: false,
      errors: false
    }
  },

微应用

1. 导出相应的生命周期钩子

在main.js同级新建public-path.js

public-path.js

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

 main.js


import './public-path'

let instance = null;
function render(props = {}) {
	console.log(props)
  const { container } = props;
  instance = new Vue({
      router,
      store,
      i18n,
    render: (h) => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');
}
if(__webpack_public_path__){
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;

}
// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}
if(window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__){
  console.log(window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__,window,"--") ;
}

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;
}

vue.config.js

const vueConfig = {
    publicPath:'./',
    devServer: {
      port:8081,
      headers: {
        'Access-Control-Allow-Origin': '*',
      },
    },
    configureWebpack: {
      output: {
        library: `${packageName}-[name]`,
        libraryTarget: 'umd',
        jsonpFunction: `webpackJsonp_${packageName}`,
      },
    },
}

然后分别运行俩个项目即可

打包部署

主项目和子项目在同一服务器同目录

改造主项目 main.js

registerMicroApps([
  {
    name: 'qiankun-children',
    entry: '/aaa/', 
    container: '#yourContainer',
    activeRule: '/dome1',
  },
]);

vue.config.js

const vueConfig = {

 publicPath:`/aaa/`,

}

标签:__,.__,框架,前端,js,qiankun,window,props
来源: https://blog.csdn.net/qq_28223305/article/details/122301593