|
@@ -0,0 +1,99 @@
|
|
|
+import "./public-path";
|
|
|
+import { createApp } from "vue";
|
|
|
+import { createRouter, createMemoryHistory } from "vue-router";
|
|
|
+import App from "./App.vue";
|
|
|
+import routes from "./router";
|
|
|
+import store from "./store";
|
|
|
+import packageJson from "../package.json";
|
|
|
+
|
|
|
+const packageName = packageJson.name;
|
|
|
+const rootId = packageName + "__id";
|
|
|
+
|
|
|
+let instance = null;
|
|
|
+let router = null;
|
|
|
+let history = null;
|
|
|
+
|
|
|
+function render(props = {}) {
|
|
|
+ const { container } = props;
|
|
|
+
|
|
|
+ history = createMemoryHistory(
|
|
|
+ window.__POWERED_BY_QIANKUN__ ? `/${packageName}` : "/"
|
|
|
+ );
|
|
|
+
|
|
|
+ router = createRouter({
|
|
|
+ history,
|
|
|
+ routes,
|
|
|
+ });
|
|
|
+
|
|
|
+ instance = createApp(App);
|
|
|
+ instance.use(router);
|
|
|
+ instance.use(store);
|
|
|
+ instance.mount(
|
|
|
+ container
|
|
|
+ ? container.querySelector(`#${rootId}`)
|
|
|
+ : document.getElementById(rootId)
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+if (!window.__POWERED_BY_QIANKUN__) {
|
|
|
+ render();
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。
|
|
|
+ * 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。
|
|
|
+ */
|
|
|
+export async function bootstrap(props) {
|
|
|
+ console.log(`[${packageName}] app bootstraped`, props);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法
|
|
|
+ */
|
|
|
+export async function mount(props) {
|
|
|
+ console.log(`[${packageName}] app mount`, props);
|
|
|
+
|
|
|
+ // templateCode: 子应用的唯一标识,格式: `PoiID_${poiId}_TemplateCode_${templateCode}`
|
|
|
+ // appName: 子应用的名称
|
|
|
+ // entry: 子应用的地址,带版本号,可以当成 baseUrl 使用
|
|
|
+ // App3DNode: 子应用使用的节点,所有加载3d资源都要放入该节点下
|
|
|
+ // AppCameraNode: 主应用分配的camera节点,在主摄像机下的空节点
|
|
|
+ // SenseNode: 主应用分配的UI节点
|
|
|
+ // PoiConfig: 子应用 POI 配置信息
|
|
|
+ // SubAppInfo: 子应用的配置,只有基本信息。通用配置、子应用配置、运营配置和奖品配置都需要额外获取
|
|
|
+ // customProps: 自定义传参
|
|
|
+ // const {
|
|
|
+ // appName,
|
|
|
+ // templateCode,
|
|
|
+ // entry,
|
|
|
+ // App3DNode,
|
|
|
+ // AppCameraNode,
|
|
|
+ // SenseNode,
|
|
|
+ // PoiConfig,
|
|
|
+ // SubAppInfo,
|
|
|
+ // customProps,
|
|
|
+ // } = props;
|
|
|
+
|
|
|
+ render(props);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例
|
|
|
+ */
|
|
|
+export async function unmount() {
|
|
|
+ console.log(`[${packageName}] app unmount`);
|
|
|
+ instance.unmount();
|
|
|
+ instance._container.innerHTML = "";
|
|
|
+ instance = null;
|
|
|
+ router = null;
|
|
|
+ history.destroy();
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效
|
|
|
+ * 该生命周期钩子,目前仅仅用于设置子应用的 激活/未激活 状态
|
|
|
+ */
|
|
|
+export async function update(customProps) {
|
|
|
+ // 假如没有相关需求,该生命周期可以删除
|
|
|
+ console.log(`[${packageName}] app update`, customProps);
|
|
|
+}
|