apps.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { prefetchApps, AppMetadata } from 'qiankun';
  2. /**
  3. *微应用apps
  4. * @name: 微应用名称 - 具有唯一性
  5. * @entry: 微应用入口.必选 - 通过该地址加载微应用,
  6. * @container: 微应用挂载节点 - 微应用加载完成后将挂载在该节点上
  7. * @activeRule: 微应用触发的路由规则 - 触发路由规则后将加载该微应用
  8. */
  9. //子应用列表
  10. const _apps: AppMetadata[] = [];
  11. for (const key in import.meta.env) {
  12. if (key === 'VITE_APP_SUB_APP') {
  13. const appList = JSON.parse(import.meta.env[key].replace(/'/g, '"'));
  14. appList.forEach((app) => {
  15. let utlStr;
  16. if (import.meta.env.PROD) {
  17. // 多端口请求
  18. if (VUE_APP_URL.baseUrl.split(':').length > 1) {
  19. utlStr = VUE_APP_URL.baseUrl.split(':')[1] + app[1];
  20. } else {
  21. utlStr = app[1];
  22. }
  23. } else {
  24. utlStr = app[1];
  25. }
  26. const obj = {
  27. name: app[0],
  28. entry: utlStr,
  29. container: `#${app[0]}`,
  30. activeRule: app[0],
  31. };
  32. // debugger;
  33. _apps.push(obj);
  34. });
  35. }
  36. // prefetchApps([..._apps]);
  37. // 延迟预取子应用资源到浏览器空闲时,避免启动时与首屏关键请求竞争带宽
  38. const schedulePrefetch = window.requestIdleCallback || ((cb) => setTimeout(cb, 200));
  39. schedulePrefetch(
  40. () => {
  41. prefetchApps([..._apps]);
  42. },
  43. { timeout: 3000 } as IdleRequestOptions
  44. );
  45. }
  46. export const apps = _apps;