diff --git a/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts b/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts new file mode 100644 index 00000000..3f5c3344 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/plugin/manager/RemoteEntryManager.ts @@ -0,0 +1,45 @@ +import { PConst } from '@/platform/PConst'; +import { Environment } from '@/platform/plugin/environment'; +import Axios from 'axios'; +import { JavascriptLoader } from '@/platform/utils'; + +class RemoteEntryManager { + /** + * 动态加载远程组件入口 JS 文件 + * @param callback 加载完成后的回调(当加载成功或失败后都会回调) + */ + public static loadRemoteEntries(callback) { + if (Environment.isAloneFrontend()) { + const remoteEntries = Environment.getRemoteEntries(); + if (remoteEntries) { + const urls = []; + for (const key in remoteEntries) { + urls.push(Environment.getWebContextPath() + remoteEntries[key]); + } + console.debug('Loading remote entries ...', urls); + const loader = new JavascriptLoader((errorUrl) => { + callback(); + }); + loader.load(urls); + } + } else { + const axios = Axios.create({}); + axios.get(Environment.apiContextPath(PConst.API_REMOTE_ENTRY_URL)).then((response) => { + const remoteEntries = response.data.data; + if (remoteEntries) { + const urls = []; + for (const key in remoteEntries) { + urls.push(remoteEntries[key]); + } + console.debug('Loading remote entries ...', urls); + const loader = new JavascriptLoader((errorUrl) => { + callback(); + }); + loader.load(urls); + } + }); + } + } +} + +export { RemoteEntryManager };