index.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * qiankun配置
  3. */
  4. import { loadMicroApp, start } from 'qiankun';
  5. import { apps } from './apps';
  6. import { getProps } from './state';
  7. const activeApps = {};
  8. /**
  9. * 重构apps
  10. */
  11. function filterApps() {
  12. apps.forEach((item) => {
  13. //主应用需要传递给微应用的数据。
  14. item['props'] = getProps();
  15. //微应用触发的路由规则
  16. // @ts-ignore
  17. item.activeRule = item.activeRule.startsWith('/') ? item.activeRule : `/${item.activeRule}`;
  18. });
  19. return apps;
  20. }
  21. const mountMicroApp = (name, isReFresh = false) => {
  22. const microApps = filterApps();
  23. const app = microApps.find((item) => item.name === name);
  24. if (app) {
  25. const instance = activeApps[app.name];
  26. if (instance && instance.getStatus() === 'NOT_MOUNTED' && !isReFresh) {
  27. instance.mount(app);
  28. } else {
  29. delete activeApps[app.name];
  30. activeApps[app.name] = loadMicroApp(app, { autoStart: false, sandbox: { strictStyleIsolation: false } }); // 手动加载子应用'
  31. }
  32. }
  33. };
  34. // 卸载app的方法
  35. const unmountMicroApps = async (multipleApp) => {
  36. if (JSON.stringify(activeApps) !== '{}' && multipleApp.some) {
  37. for (const key in activeApps) {
  38. multipleApp.filter(async (name) => {
  39. if (name.includes(key)) {
  40. await activeApps[key].unmount();
  41. }
  42. });
  43. }
  44. }
  45. };
  46. export { mountMicroApp, unmountMicroApps, activeApps };