美文网首页
2021-04-26 single-spa-vue 微前端初实践

2021-04-26 single-spa-vue 微前端初实践

作者: FConfidence | 来源:发表于2021-04-26 12:00 被阅读0次

SingleSpa - VueCli - 微前端落地方案

  1. 创建项目parent-vue和child-vue两个项目
  2. vue create parent-vue
  3. vue create child-vue
parent-Vue
  1. 安装依赖: yarn add

  2. yarn add single-spa

  3. main.js改造

    import Vue from "vue";
    import App from "./App.vue";
    import router from "./router";
    import store from "./store";
    
    Vue.config.productionTip = false;
    
    import './single-spa';
    
    new Vue({
      router,
      store,
      render: (h) => h(App),
    }).$mount("#app");
    
    // single-spa.js
    import { registerApplication, start } from "single-spa";
    
    async function loadScript(url) {
      return new Promise((resolve, reject) => {
        // 创建标签,并将标签加到head中
        let script = document.createElement("script");
        script.src = url;
        script.onload = resolve;
        script.onerror = reject;
        document.head.appendChild(script);
      });
    }
    // 注册应用
    registerApplication(
      "myVueApp",
      async () => {
        // 加载子组件导出的类库和资源,注意先后顺序
        await loadScript(`http://localhost:3001/js/chunk-vendors.js`);
        await loadScript(`http://localhost:3001/js/app.js`);
        return window.singleVue; // 返回子应用里导出的生命周期,mount,ummount,bootstrap
      },
      // 当用户切换到/myVueApp的路径下时,加载刚才定义子子应用
      (location) => location.pathname.startsWith("/myVueApp")
    );
    start();
    

child-Vue

  1. 安装依赖: yarn add single-spa-vue

  2. vue.config.js调整

    module.exports = {
      publicPath: "//localhost:3001/",
      // css在所有环境下,都不单独打包为文件。这样是为了保证最小引入(只引入js)
      css: {
          extract: false
      },
      // chainWebpack: config => {
      //   config.externals(['vue', 'vue-router']);
      // },
      configureWebpack: {
        output: {
          library: "singleVue",
          //挂载目标 umd or window
          libraryTarget: "umd",
        },
        devServer: {
          contentBase: './',
          compress: true,
          port: 3001,
        },
      },
    };
    
  3. main.js改造

    import Vue from "vue";
    import App from "./App.vue";
    import router from "./router";
    import store from "./store";
    
    import singleSpaVue from 'single-spa-vue';
    
    Vue.config.productionTip = false;
    
    const appOptions = {
      el: '#child-vue', // 挂载到父应用中id为vue的标签中
      router,
      store,
      render: h => h(App)
    }
    
    // 使用 singleSpaVue 包装 Vue,
    // 包装后返回的对象中vue包装好的三个生命周期,bootstrap,mount,unmount,
    const vueLifeCycle = singleSpaVue({ Vue, appOptions });
    
    // 协议接入,我们定好了协议,父应用会调用这些方法
    export const bootstrap = vueLifeCycle.bootstrap;
    export const mount = vueLifeCycle.mount;
    export const unmount = vueLifeCycle.unmount;
    
    /*
    new Vue({
      router,
      store,
      render: (h) => h(App),
    }).$mount("#app");
    */
    

参考

  1. https://www.yuque.com/xwifrr/zqg2pw/xganz7
  2. https://blog.csdn.net/weixin_39085822/article/details/108832278

相关文章

  • 2021-04-26 single-spa-vue 微前端初实践

    SingleSpa - VueCli - 微前端落地方案 创建项目parent-vue和child-vue两个项目...

  • 微前端:了解下概念

    qiankun(乾坤) 微前端实践 可能是你见过最完善的微前端解决方案 实施微前端的六种方式 微前端-美团系列

  • 微前端实践

    在 toB 的前端开发工作中,我们往往就会遇到如下困境: 工程越来越大,打包越来越慢 团队人员多,产品功能复杂,代...

  • 2021-04-26

    2021-04-26

  • single-spa微前端简单实践与优化思路

    微前端简单实践 什么是single-spa或者说什么是微前端 微前端是指存在于浏览器中的微服务。 微服务大家应该都...

  • 基于 qiankun 的微前端最佳实践(图文并茂) - 应用部署

    写在开头 微前端系列文章: 基于 qiankun 的微前端最佳实践(万字长文) - 从 0 到 1 篇[https...

  • 微前端架构实践

    微前端解决的问题 跨框架: 在一个页面上运行,可以同时使用多个框架 应用拆分:将一个复杂的应用拆解为多个微小的应用...

  • 微前端的实践

    前端时间打算建立更新下自己的github page,所以先在gitee上进行可实验,开始选用qiankun后来使用...

  • 微前端qiankun实践

    什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略. 微前...

  • qiankun微前端实践

    微前端的好处: 1.技术栈无关,各个子项目可以自由选择框架,可以自己制定开发规范。2.快速打包,独立部署,互不影响...

网友评论

      本文标题:2021-04-26 single-spa-vue 微前端初实践

      本文链接:https://www.haomeiwen.com/subject/fpzsrltx.html