• vue3 + ts + qiankun2 微服务搭建


    vite目前暂不支持qiankun

    qiankun官网:https://qiankun.umijs.org/zh/guide

    主应用(vue2版本)

    安装qiankun :$ yarn add qiankun # 或者 npm i qiankun -S

    main.js

      import { registerMicroApps, start } from "qiankun";
      // 定义要整合的微应用列表
      const apps = [
        {
          name: "vue", // 应用的名字
          entry: "http://localhost:10003/", // 默认加载这个html,解析里面的js动态的执行(子应用必须支持跨域,内部使用的是 fetch)
          container: "#VUE", // 要渲染到的容器名id--> APP页面中
          activeRule: "#/vue", // 通过哪一个路由来激活
        },
      ];
      // 注册应用
      registerMicroApps(apps);
      // 开启应用
      start();
    

    APP.vue

    <template>
      <div>
        <router-link to="/vue">vue子应用3</router-link>
        <router-view></router-view>
        <div id="VUE"></div>
      </div>
    </template>
    

    子应用

    src目录下新建 public-path.ts文件,并在main.ts顶部中导入

    public-path.ts

      let w: any = window;
      if (w.__POWERED_BY_QIANKUN__) {
        __webpack_public_path__ = w.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
      }
    

    main.ts

      import "./public-path.ts";
      import { createApp } from "vue";
      import App from "./App.vue";
      import router from "./router";
      import store from "./store";
    
      // 为保证子应用也可以独立运行,需做以下判断
      (window as any).__POWERED_BY_QIANKUN__ ? "" : render();
    
      function render() {
        createApp(App).use(store).use(router).mount("#vueApp");
      }
    
      // 必须导出生命周期
      export async function bootstrap(props: any) {
        console.log("[vue] vue app bootstraped");
      }
      export async function mount(props: any) {
        console.log("mount");
        render(); //一般需等mount后再渲染挂载
      }
      export async function unmount(props: any) {
        console.log("unmount");
      }
    

    vue.config.js

      const { name } = require("./package");
    
      module.exports = {
        publicPath: "./", //基本路径
        outputDir: "dist", //构建时的输出目录
        assetsDir: "static", //放置静态资源的目录
        indexPath: "index.html", //html 的输出路径
        filenameHashing: true, //文件名哈希值
        lintOnSave: true, //是否在保存的时候使用 `eslint-loader` 进行检查。
    
        //组件是如何被渲染到页面中的? (ast:抽象语法树;vDom:虚拟DOM)
        //template ---> ast ---> render ---> vDom ---> 真实的Dom ---> 页面
        //runtime-only:将template在打包的时候,就已经编译为render函数
        //runtime-compiler:在运行的时候才去编译template
        runtimeCompiler: false,
    
        transpileDependencies: [], //babel-loader 默认会跳过 node_modules 依赖。
        productionSourceMap: false, //是否为生产环境构建生成 source map?
    
        configureWebpack: {
          output: {
            // 把子应用打包成 umd 库格式
            library: `${name}-[name]`,
            libraryTarget: "umd",
            jsonpFunction: `webpackJsonp_${name}`,
          },
        },
    
        // 配置 webpack-dev-server 行为。
        devServer: {
          open: true, //编译后默认打开浏览器
          host: "0.0.0.0", //域名
          port: 10003, // 端口
          https: false, //是否https
          headers: {
            "Access-Control-Allow-Origin": "*", //********子应用中必须设置跨域******************
          },
          //显示警告和错误
          overlay: {
            warnings: false,
            errors: true,
          },
          // proxy: {
          //     '/api': {
          //         target: 'http://*******',
          //         changeOrigin: true, //是否跨域
          //         ws: false, //是否支持websocket
          //         secure: false, //如果是https接口,需要配置这个参数
          //         pathRewrite: {
          //             '^/api': ''
          //         }
          //     }
          // }
        },
      };
    
    

    router/index.ts

      import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
      import Home from "../views/Home.vue";
    
      const routes: Array<RouteRecordRaw> = [
        //独立运行
        {
          path: "/",
          redirect: "/vue/home",
        },
        //主应用中运行
        {
          path: "/vue", //许河主应用activeRule对应
          redirect: "/vue/home",
        },
        {
          path: "/vue/home",
          name: "Home",
          component: Home,
        },
        {
          path: "/vue/about",
          name: "About",
          component: () => import("../views/About.vue"),
        },
      ];
    //配置独立运行 或 主应用运行
      let base: string = (window as any).__POWERED_BY_QIANKUN__ ? "/vue" : "";
      // function setBASE(params: Array<RouteRecordRaw>) {
      //   params.forEach((item) => {
      //     // let addSign = item.path.indexOf("/") == 0 ? "" : "/";
      //     item.path = base + item.path;
      //     if (item.children) {
      //       setBASE(item.children);
      //     }
      //   });
      //   return params;
      // }
      // const baseRoutes = setBASE(routes);
      // console.log(baseRoutes, "baseRoutes");
      const router = createRouter({
        history: createWebHashHistory(base),
        routes,
      });
    
      export default router;
    
    
  • 相关阅读:
    2019/5/13 洛谷P4742 【tarjan缩点 + 拓扑dp】
    图论500题
    欧拉回路与欧拉路径
    二分图的判定
    二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】
    网络流三大算法【邻接矩阵+邻接表】POJ1273
    马拉车算法,mannacher查找最长回文子串
    tarjan算法(强连通分量 + 强连通分量缩点 + 桥(割边) + 割点 + LCA)
    luogu P5774 [JSOI2016]病毒感染 线性 dp
    luguo P2519 [HAOI2011]problem a dp+贪心
  • 原文地址:https://www.cnblogs.com/FormerWhite/p/15514724.html
Copyright © 2020-2023  润新知