@maxax/x-plugins-micro 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +57 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -1
- package/dist/index.d.ts +37 -1
- package/dist/index.mjs +52 -1
- package/dist/index.mjs.map +1 -1
- package/dist/plugin.cjs +142 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +8 -0
- package/dist/plugin.d.ts +8 -0
- package/dist/plugin.mjs +107 -0
- package/dist/plugin.mjs.map +1 -0
- package/package.json +9 -1
package/dist/index.cjs
CHANGED
|
@@ -26,12 +26,63 @@ __export(index_exports, {
|
|
|
26
26
|
getMicroApps: () => getMicroApps,
|
|
27
27
|
hasMicroApps: () => hasMicroApps,
|
|
28
28
|
hasValidEntry: () => hasValidEntry,
|
|
29
|
+
isPoweredByMicro: () => isPoweredByMicro,
|
|
29
30
|
microAppManager: () => microAppManager,
|
|
31
|
+
qiankunWindow: () => qiankunWindow,
|
|
32
|
+
renderWithQiankun: () => renderWithQiankun,
|
|
30
33
|
setupMicroPluginApps: () => setupMicroPluginApps,
|
|
31
|
-
startMicroPluginApps: () => startMicroPluginApps
|
|
34
|
+
startMicroPluginApps: () => startMicroPluginApps,
|
|
35
|
+
useMicroAppLifecycle: () => useMicroAppLifecycle
|
|
32
36
|
});
|
|
33
37
|
module.exports = __toCommonJS(index_exports);
|
|
34
38
|
|
|
39
|
+
// src/helper.ts
|
|
40
|
+
var qiankunWindow = typeof window !== "undefined" ? window.proxy || window : {};
|
|
41
|
+
var renderWithQiankun = (qiankunLifeCycle) => {
|
|
42
|
+
if (qiankunWindow == null ? void 0 : qiankunWindow.__POWERED_BY_QIANKUN__) {
|
|
43
|
+
if (!window.moudleQiankunAppLifeCycles) {
|
|
44
|
+
window.moudleQiankunAppLifeCycles = {};
|
|
45
|
+
}
|
|
46
|
+
if (qiankunWindow.qiankunName) {
|
|
47
|
+
window.moudleQiankunAppLifeCycles[qiankunWindow.qiankunName] = qiankunLifeCycle;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
function isPoweredByMicro() {
|
|
52
|
+
return qiankunWindow.__POWERED_BY_QIANKUN__;
|
|
53
|
+
}
|
|
54
|
+
function useMicroAppLifecycle({ mount, unmount, update, bootstrap }) {
|
|
55
|
+
const mountMicroApp = async (props) => {
|
|
56
|
+
await (mount == null ? void 0 : mount(props));
|
|
57
|
+
};
|
|
58
|
+
const unmountMicroApp = async (props) => {
|
|
59
|
+
await (unmount == null ? void 0 : unmount(props));
|
|
60
|
+
};
|
|
61
|
+
const updateMicroApp = async (props) => {
|
|
62
|
+
await (update == null ? void 0 : update(props));
|
|
63
|
+
};
|
|
64
|
+
const bootstrapMicroApp = async () => {
|
|
65
|
+
await (bootstrap == null ? void 0 : bootstrap());
|
|
66
|
+
};
|
|
67
|
+
if (!isPoweredByMicro()) {
|
|
68
|
+
void mountMicroApp();
|
|
69
|
+
}
|
|
70
|
+
renderWithQiankun({
|
|
71
|
+
async bootstrap() {
|
|
72
|
+
await bootstrapMicroApp();
|
|
73
|
+
},
|
|
74
|
+
async mount(props) {
|
|
75
|
+
await mountMicroApp(props);
|
|
76
|
+
},
|
|
77
|
+
async unmount(props) {
|
|
78
|
+
await unmountMicroApp(props);
|
|
79
|
+
},
|
|
80
|
+
async update(props) {
|
|
81
|
+
await updateMicroApp(props);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
35
86
|
// src/setup.ts
|
|
36
87
|
var import_qiankun = require("qiankun");
|
|
37
88
|
var MicroAppManager = class {
|
|
@@ -189,8 +240,12 @@ function hasValidEntry(app) {
|
|
|
189
240
|
getMicroApps,
|
|
190
241
|
hasMicroApps,
|
|
191
242
|
hasValidEntry,
|
|
243
|
+
isPoweredByMicro,
|
|
192
244
|
microAppManager,
|
|
245
|
+
qiankunWindow,
|
|
246
|
+
renderWithQiankun,
|
|
193
247
|
setupMicroPluginApps,
|
|
194
|
-
startMicroPluginApps
|
|
248
|
+
startMicroPluginApps,
|
|
249
|
+
useMicroAppLifecycle
|
|
195
250
|
});
|
|
196
251
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/setup.ts"],"sourcesContent":["export * from './setup'\nexport * from './types'\n","/**\n * 微前端应用设置和启动模块\n * @module setup\n */\n\nimport type { FrameworkConfiguration } from 'qiankun'\nimport { addGlobalUncaughtErrorHandler, registerMicroApps, start } from 'qiankun'\nimport type { MicroAppDescriptor, MicroAppSetupOptions, MicroAppStartOptions } from './types'\n\n/**\n * 微前端管理器类\n * 负责管理微应用的注册、启动和生命周期\n */\nexport class MicroAppManager {\n /** 是否已注册微应用 */\n private hasRegistered = false\n\n /** 是否已启动微前端框架 */\n private hasStarted = false\n\n /** 微应用配置列表 */\n private apps: MicroAppDescriptor[] = []\n\n /** 启动配置选项 */\n private startOptions: MicroAppStartOptions = {}\n\n /** 自定义加载器函数 */\n private loader?: (loading: boolean) => void\n\n /** 自定义错误处理函数 */\n private onError?: (event: Event | string) => void\n\n /**\n * 检查是否有有效的微应用配置\n * @returns 是否存在有效的微应用\n */\n hasMicroApps(): boolean {\n return this.apps.length > 0\n }\n\n /**\n * 过滤出有效的微应用配置(必须有 entry)\n * @param apps 微应用配置列表\n * @returns 有效的微应用配置列表\n */\n private filterValidApps(apps: MicroAppDescriptor[]): MicroAppDescriptor[] {\n return apps.filter((app): app is MicroAppDescriptor & { entry: string } => {\n return typeof app.entry === 'string' && app.entry.length > 0\n })\n }\n\n /**\n * 设置微前端应用\n * @param options 设置选项\n */\n setup(options: MicroAppSetupOptions): void {\n if (this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用已经注册,跳过重复注册')\n return\n }\n\n // 过滤出有效的微应用配置\n this.apps = this.filterValidApps(options.apps)\n\n if (!this.hasMicroApps()) {\n console.warn('[x-micro-plugin] 没有有效的微应用配置,跳过注册')\n return\n }\n\n // 保存配置选项\n this.startOptions = options.startOptions || {}\n this.loader = options.loader\n this.onError = options.onError\n\n // 注册微应用\n this.registerMicroApps()\n\n // 设置全局错误处理\n this.setupErrorHandler()\n\n this.hasRegistered = true\n }\n\n /**\n * 注册微应用到 qiankun\n */\n private registerMicroApps(): void {\n registerMicroApps(\n this.apps.map(app => ({\n name: app.name,\n entry: app.entry!,\n container: `#${app.containerId}`,\n activeRule: app.activeRule,\n props: {\n ...app.props\n },\n loader: (loading: boolean) => {\n // 调用自定义加载器\n this.loader?.(loading)\n }\n }))\n )\n }\n\n /**\n * 设置全局错误处理\n */\n private setupErrorHandler(): void {\n addGlobalUncaughtErrorHandler((event: Event | string) => {\n // 调用自定义错误处理函数\n if (this.onError) {\n this.onError(event)\n } else {\n // 默认错误处理\n console.error('[x-micro-plugin] 微应用加载错误', event)\n // 尝试使用全局消息提示\n if (typeof window !== 'undefined' && (window as any).$message) {\n console.error('子应用加载失败,请稍后重试')\n }\n }\n })\n }\n\n /**\n * 启动微前端框架\n */\n start(): void {\n if (!this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用尚未注册,请先调用 setup() 方法')\n return\n }\n\n if (this.hasStarted) {\n console.warn('[x-micro-plugin] 微前端框架已经启动,跳过重复启动')\n return\n }\n\n const startOpts: FrameworkConfiguration = {\n prefetch: this.startOptions.prefetch !== false, // 默认启用预加载\n sandbox: {\n experimentalStyleIsolation: this.startOptions.sandbox?.experimentalStyleIsolation ?? true,\n strictStyleIsolation: this.startOptions.sandbox?.strictStyleIsolation ?? false,\n ...this.startOptions.sandbox\n },\n ...this.startOptions\n }\n\n start(startOpts)\n\n this.hasStarted = true\n }\n\n /**\n * 获取已注册的微应用配置列表\n * @returns 微应用配置列表的只读副本\n */\n getApps(): ReadonlyArray<MicroAppDescriptor> {\n return [...this.apps]\n }\n\n /**\n * 重置管理器状态(主要用于测试)\n */\n reset(): void {\n this.hasRegistered = false\n this.hasStarted = false\n this.apps = []\n this.startOptions = {}\n this.loader = undefined\n this.onError = undefined\n }\n}\n\n/**\n * 全局微前端管理器实例\n */\nexport const microAppManager = new MicroAppManager()\n\n/**\n * 设置微前端应用(便捷函数)\n * @param options 设置选项\n */\nexport function setupMicroPluginApps(options: MicroAppSetupOptions): void {\n microAppManager.setup(options)\n}\n\n/**\n * 启动微前端框架(便捷函数)\n */\nexport function startMicroPluginApps(): void {\n microAppManager.start()\n}\n\n/**\n * 检查是否有微应用(便捷函数)\n * @returns 是否存在微应用\n */\nexport function hasMicroApps(): boolean {\n return microAppManager.hasMicroApps()\n}\n\n/**\n * 获取微应用配置列表(便捷函数)\n * @returns 微应用配置列表\n */\nexport function getMicroApps(): ReadonlyArray<MicroAppDescriptor> {\n return microAppManager.getApps()\n}\n\n/**\n * 类型守卫:检查微应用是否有有效的入口地址\n * @param app 微应用描述符\n * @returns 是否为有效的微应用(有入口地址)\n */\nexport function hasValidEntry(app: MicroAppDescriptor): app is MicroAppDescriptor & { entry: string } {\n return typeof app.entry === 'string' && app.entry.length > 0\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/helper.ts","../src/setup.ts"],"sourcesContent":["export * from './helper'\nexport * from './setup'\nexport * from './types'\n","import type { QiankunLifeCycle, QiankunProps, QiankunWindow, UseMicroAppOptions } from './types'\n\n// @ts-ignore\nexport const qiankunWindow: QiankunWindow = typeof window !== 'undefined' ? window.proxy || window : {}\n\nexport const renderWithQiankun = (qiankunLifeCycle: QiankunLifeCycle) => {\n // 函数只有一次执行机会,需要把生命周期赋值给全局\n if (qiankunWindow?.__POWERED_BY_QIANKUN__) {\n // @ts-ignore\n if (!window.moudleQiankunAppLifeCycles) {\n // @ts-ignore\n window.moudleQiankunAppLifeCycles = {}\n }\n // @ts-ignore\n if (qiankunWindow.qiankunName) {\n // @ts-ignore\n window.moudleQiankunAppLifeCycles[qiankunWindow.qiankunName] = qiankunLifeCycle\n }\n }\n}\n\n/**\n * Check if the app is running under Qiankun\n * @returns Whether the app is running under Qiankun\n */\nexport function isPoweredByMicro() {\n return qiankunWindow.__POWERED_BY_QIANKUN__\n}\n\n/**\n * Encapsulate Qiankun micro-frontend lifecycle wiring into a reusable hook\n */\nexport function useMicroAppLifecycle({ mount, unmount, update, bootstrap }: UseMicroAppOptions) {\n /** Mount logic for the micro app */\n const mountMicroApp = async (props?: QiankunProps) => {\n await mount?.(props)\n }\n\n /** Cleanup logic when Qiankun unmounts the micro app */\n const unmountMicroApp = async (props?: QiankunProps) => {\n await unmount?.(props)\n }\n\n /** Update logic for the micro app */\n const updateMicroApp = async (props?: QiankunProps) => {\n await update?.(props)\n }\n\n /** Bootstrap logic for the micro app */\n const bootstrapMicroApp = async () => {\n await bootstrap?.()\n }\n\n if (!isPoweredByMicro()) {\n void mountMicroApp()\n }\n\n renderWithQiankun({\n async bootstrap() {\n await bootstrapMicroApp()\n },\n async mount(props) {\n await mountMicroApp(props)\n },\n async unmount(props) {\n await unmountMicroApp(props)\n },\n async update(props) {\n await updateMicroApp(props)\n }\n })\n}\n","/**\n * 微前端应用设置和启动模块\n * @module setup\n */\n\nimport type { FrameworkConfiguration } from 'qiankun'\nimport { addGlobalUncaughtErrorHandler, registerMicroApps, start } from 'qiankun'\nimport type { MicroAppDescriptor, MicroAppSetupOptions, MicroAppStartOptions } from './types'\n\n/**\n * 微前端管理器类\n * 负责管理微应用的注册、启动和生命周期\n */\nexport class MicroAppManager {\n /** 是否已注册微应用 */\n private hasRegistered = false\n\n /** 是否已启动微前端框架 */\n private hasStarted = false\n\n /** 微应用配置列表 */\n private apps: MicroAppDescriptor[] = []\n\n /** 启动配置选项 */\n private startOptions: MicroAppStartOptions = {}\n\n /** 自定义加载器函数 */\n private loader?: (loading: boolean) => void\n\n /** 自定义错误处理函数 */\n private onError?: (event: Event | string) => void\n\n /**\n * 检查是否有有效的微应用配置\n * @returns 是否存在有效的微应用\n */\n hasMicroApps(): boolean {\n return this.apps.length > 0\n }\n\n /**\n * 过滤出有效的微应用配置(必须有 entry)\n * @param apps 微应用配置列表\n * @returns 有效的微应用配置列表\n */\n private filterValidApps(apps: MicroAppDescriptor[]): MicroAppDescriptor[] {\n return apps.filter((app): app is MicroAppDescriptor & { entry: string } => {\n return typeof app.entry === 'string' && app.entry.length > 0\n })\n }\n\n /**\n * 设置微前端应用\n * @param options 设置选项\n */\n setup(options: MicroAppSetupOptions): void {\n if (this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用已经注册,跳过重复注册')\n return\n }\n\n // 过滤出有效的微应用配置\n this.apps = this.filterValidApps(options.apps)\n\n if (!this.hasMicroApps()) {\n console.warn('[x-micro-plugin] 没有有效的微应用配置,跳过注册')\n return\n }\n\n // 保存配置选项\n this.startOptions = options.startOptions || {}\n this.loader = options.loader\n this.onError = options.onError\n\n // 注册微应用\n this.registerMicroApps()\n\n // 设置全局错误处理\n this.setupErrorHandler()\n\n this.hasRegistered = true\n }\n\n /**\n * 注册微应用到 qiankun\n */\n private registerMicroApps(): void {\n registerMicroApps(\n this.apps.map(app => ({\n name: app.name,\n entry: app.entry!,\n container: `#${app.containerId}`,\n activeRule: app.activeRule,\n props: {\n ...app.props\n },\n loader: (loading: boolean) => {\n // 调用自定义加载器\n this.loader?.(loading)\n }\n }))\n )\n }\n\n /**\n * 设置全局错误处理\n */\n private setupErrorHandler(): void {\n addGlobalUncaughtErrorHandler((event: Event | string) => {\n // 调用自定义错误处理函数\n if (this.onError) {\n this.onError(event)\n } else {\n // 默认错误处理\n console.error('[x-micro-plugin] 微应用加载错误', event)\n // 尝试使用全局消息提示\n if (typeof window !== 'undefined' && (window as any).$message) {\n console.error('子应用加载失败,请稍后重试')\n }\n }\n })\n }\n\n /**\n * 启动微前端框架\n */\n start(): void {\n if (!this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用尚未注册,请先调用 setup() 方法')\n return\n }\n\n if (this.hasStarted) {\n console.warn('[x-micro-plugin] 微前端框架已经启动,跳过重复启动')\n return\n }\n\n const startOpts: FrameworkConfiguration = {\n prefetch: this.startOptions.prefetch !== false, // 默认启用预加载\n sandbox: {\n experimentalStyleIsolation: this.startOptions.sandbox?.experimentalStyleIsolation ?? true,\n strictStyleIsolation: this.startOptions.sandbox?.strictStyleIsolation ?? false,\n ...this.startOptions.sandbox\n },\n ...this.startOptions\n }\n\n start(startOpts)\n\n this.hasStarted = true\n }\n\n /**\n * 获取已注册的微应用配置列表\n * @returns 微应用配置列表的只读副本\n */\n getApps(): ReadonlyArray<MicroAppDescriptor> {\n return [...this.apps]\n }\n\n /**\n * 重置管理器状态(主要用于测试)\n */\n reset(): void {\n this.hasRegistered = false\n this.hasStarted = false\n this.apps = []\n this.startOptions = {}\n this.loader = undefined\n this.onError = undefined\n }\n}\n\n/**\n * 全局微前端管理器实例\n */\nexport const microAppManager = new MicroAppManager()\n\n/**\n * 设置微前端应用(便捷函数)\n * @param options 设置选项\n */\nexport function setupMicroPluginApps(options: MicroAppSetupOptions): void {\n microAppManager.setup(options)\n}\n\n/**\n * 启动微前端框架(便捷函数)\n */\nexport function startMicroPluginApps(): void {\n microAppManager.start()\n}\n\n/**\n * 检查是否有微应用(便捷函数)\n * @returns 是否存在微应用\n */\nexport function hasMicroApps(): boolean {\n return microAppManager.hasMicroApps()\n}\n\n/**\n * 获取微应用配置列表(便捷函数)\n * @returns 微应用配置列表\n */\nexport function getMicroApps(): ReadonlyArray<MicroAppDescriptor> {\n return microAppManager.getApps()\n}\n\n/**\n * 类型守卫:检查微应用是否有有效的入口地址\n * @param app 微应用描述符\n * @returns 是否为有效的微应用(有入口地址)\n */\nexport function hasValidEntry(app: MicroAppDescriptor): app is MicroAppDescriptor & { entry: string } {\n return typeof app.entry === 'string' && app.entry.length > 0\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -49,6 +49,42 @@ interface MicroAppSetupOptions {
|
|
|
49
49
|
/** 自定义错误处理函数 */
|
|
50
50
|
onError?: (event: Event | string) => void;
|
|
51
51
|
}
|
|
52
|
+
interface QiankunProps {
|
|
53
|
+
container?: HTMLElement;
|
|
54
|
+
[x: string]: any;
|
|
55
|
+
}
|
|
56
|
+
interface QiankunLifeCycle {
|
|
57
|
+
bootstrap: () => void | Promise<void>;
|
|
58
|
+
mount: (props: QiankunProps) => void | Promise<void>;
|
|
59
|
+
unmount: (props: QiankunProps) => void | Promise<void>;
|
|
60
|
+
update: (props: QiankunProps) => void | Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
interface QiankunWindow {
|
|
63
|
+
__POWERED_BY_QIANKUN__?: boolean;
|
|
64
|
+
[x: string]: any;
|
|
65
|
+
}
|
|
66
|
+
interface UseMicroAppOptions {
|
|
67
|
+
/** Bootstrap logic for the micro app */
|
|
68
|
+
bootstrap?: () => Promise<void> | void;
|
|
69
|
+
/** Mount logic for the micro app, receives Qiankun props when running under Qiankun */
|
|
70
|
+
mount: (props?: QiankunProps) => Promise<void> | void;
|
|
71
|
+
/** Cleanup logic when Qiankun unmounts the micro app */
|
|
72
|
+
unmount: (props?: QiankunProps) => Promise<void> | void;
|
|
73
|
+
/** Update logic for the micro app */
|
|
74
|
+
update?: (props?: QiankunProps) => Promise<void> | void;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
declare const qiankunWindow: QiankunWindow;
|
|
78
|
+
declare const renderWithQiankun: (qiankunLifeCycle: QiankunLifeCycle) => void;
|
|
79
|
+
/**
|
|
80
|
+
* Check if the app is running under Qiankun
|
|
81
|
+
* @returns Whether the app is running under Qiankun
|
|
82
|
+
*/
|
|
83
|
+
declare function isPoweredByMicro(): boolean | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Encapsulate Qiankun micro-frontend lifecycle wiring into a reusable hook
|
|
86
|
+
*/
|
|
87
|
+
declare function useMicroAppLifecycle({ mount, unmount, update, bootstrap }: UseMicroAppOptions): void;
|
|
52
88
|
|
|
53
89
|
/**
|
|
54
90
|
* 微前端应用设置和启动模块
|
|
@@ -142,4 +178,4 @@ declare function hasValidEntry(app: MicroAppDescriptor): app is MicroAppDescript
|
|
|
142
178
|
entry: string;
|
|
143
179
|
};
|
|
144
180
|
|
|
145
|
-
export { type MicroAppDescriptor, MicroAppManager, type MicroAppSetupOptions, type MicroAppStartOptions, getMicroApps, hasMicroApps, hasValidEntry, microAppManager, setupMicroPluginApps, startMicroPluginApps };
|
|
181
|
+
export { type MicroAppDescriptor, MicroAppManager, type MicroAppSetupOptions, type MicroAppStartOptions, type QiankunLifeCycle, type QiankunProps, type QiankunWindow, type UseMicroAppOptions, getMicroApps, hasMicroApps, hasValidEntry, isPoweredByMicro, microAppManager, qiankunWindow, renderWithQiankun, setupMicroPluginApps, startMicroPluginApps, useMicroAppLifecycle };
|
package/dist/index.d.ts
CHANGED
|
@@ -49,6 +49,42 @@ interface MicroAppSetupOptions {
|
|
|
49
49
|
/** 自定义错误处理函数 */
|
|
50
50
|
onError?: (event: Event | string) => void;
|
|
51
51
|
}
|
|
52
|
+
interface QiankunProps {
|
|
53
|
+
container?: HTMLElement;
|
|
54
|
+
[x: string]: any;
|
|
55
|
+
}
|
|
56
|
+
interface QiankunLifeCycle {
|
|
57
|
+
bootstrap: () => void | Promise<void>;
|
|
58
|
+
mount: (props: QiankunProps) => void | Promise<void>;
|
|
59
|
+
unmount: (props: QiankunProps) => void | Promise<void>;
|
|
60
|
+
update: (props: QiankunProps) => void | Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
interface QiankunWindow {
|
|
63
|
+
__POWERED_BY_QIANKUN__?: boolean;
|
|
64
|
+
[x: string]: any;
|
|
65
|
+
}
|
|
66
|
+
interface UseMicroAppOptions {
|
|
67
|
+
/** Bootstrap logic for the micro app */
|
|
68
|
+
bootstrap?: () => Promise<void> | void;
|
|
69
|
+
/** Mount logic for the micro app, receives Qiankun props when running under Qiankun */
|
|
70
|
+
mount: (props?: QiankunProps) => Promise<void> | void;
|
|
71
|
+
/** Cleanup logic when Qiankun unmounts the micro app */
|
|
72
|
+
unmount: (props?: QiankunProps) => Promise<void> | void;
|
|
73
|
+
/** Update logic for the micro app */
|
|
74
|
+
update?: (props?: QiankunProps) => Promise<void> | void;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
declare const qiankunWindow: QiankunWindow;
|
|
78
|
+
declare const renderWithQiankun: (qiankunLifeCycle: QiankunLifeCycle) => void;
|
|
79
|
+
/**
|
|
80
|
+
* Check if the app is running under Qiankun
|
|
81
|
+
* @returns Whether the app is running under Qiankun
|
|
82
|
+
*/
|
|
83
|
+
declare function isPoweredByMicro(): boolean | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Encapsulate Qiankun micro-frontend lifecycle wiring into a reusable hook
|
|
86
|
+
*/
|
|
87
|
+
declare function useMicroAppLifecycle({ mount, unmount, update, bootstrap }: UseMicroAppOptions): void;
|
|
52
88
|
|
|
53
89
|
/**
|
|
54
90
|
* 微前端应用设置和启动模块
|
|
@@ -142,4 +178,4 @@ declare function hasValidEntry(app: MicroAppDescriptor): app is MicroAppDescript
|
|
|
142
178
|
entry: string;
|
|
143
179
|
};
|
|
144
180
|
|
|
145
|
-
export { type MicroAppDescriptor, MicroAppManager, type MicroAppSetupOptions, type MicroAppStartOptions, getMicroApps, hasMicroApps, hasValidEntry, microAppManager, setupMicroPluginApps, startMicroPluginApps };
|
|
181
|
+
export { type MicroAppDescriptor, MicroAppManager, type MicroAppSetupOptions, type MicroAppStartOptions, type QiankunLifeCycle, type QiankunProps, type QiankunWindow, type UseMicroAppOptions, getMicroApps, hasMicroApps, hasValidEntry, isPoweredByMicro, microAppManager, qiankunWindow, renderWithQiankun, setupMicroPluginApps, startMicroPluginApps, useMicroAppLifecycle };
|
package/dist/index.mjs
CHANGED
|
@@ -2,6 +2,53 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
4
|
|
|
5
|
+
// src/helper.ts
|
|
6
|
+
var qiankunWindow = typeof window !== "undefined" ? window.proxy || window : {};
|
|
7
|
+
var renderWithQiankun = (qiankunLifeCycle) => {
|
|
8
|
+
if (qiankunWindow == null ? void 0 : qiankunWindow.__POWERED_BY_QIANKUN__) {
|
|
9
|
+
if (!window.moudleQiankunAppLifeCycles) {
|
|
10
|
+
window.moudleQiankunAppLifeCycles = {};
|
|
11
|
+
}
|
|
12
|
+
if (qiankunWindow.qiankunName) {
|
|
13
|
+
window.moudleQiankunAppLifeCycles[qiankunWindow.qiankunName] = qiankunLifeCycle;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
function isPoweredByMicro() {
|
|
18
|
+
return qiankunWindow.__POWERED_BY_QIANKUN__;
|
|
19
|
+
}
|
|
20
|
+
function useMicroAppLifecycle({ mount, unmount, update, bootstrap }) {
|
|
21
|
+
const mountMicroApp = async (props) => {
|
|
22
|
+
await (mount == null ? void 0 : mount(props));
|
|
23
|
+
};
|
|
24
|
+
const unmountMicroApp = async (props) => {
|
|
25
|
+
await (unmount == null ? void 0 : unmount(props));
|
|
26
|
+
};
|
|
27
|
+
const updateMicroApp = async (props) => {
|
|
28
|
+
await (update == null ? void 0 : update(props));
|
|
29
|
+
};
|
|
30
|
+
const bootstrapMicroApp = async () => {
|
|
31
|
+
await (bootstrap == null ? void 0 : bootstrap());
|
|
32
|
+
};
|
|
33
|
+
if (!isPoweredByMicro()) {
|
|
34
|
+
void mountMicroApp();
|
|
35
|
+
}
|
|
36
|
+
renderWithQiankun({
|
|
37
|
+
async bootstrap() {
|
|
38
|
+
await bootstrapMicroApp();
|
|
39
|
+
},
|
|
40
|
+
async mount(props) {
|
|
41
|
+
await mountMicroApp(props);
|
|
42
|
+
},
|
|
43
|
+
async unmount(props) {
|
|
44
|
+
await unmountMicroApp(props);
|
|
45
|
+
},
|
|
46
|
+
async update(props) {
|
|
47
|
+
await updateMicroApp(props);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
5
52
|
// src/setup.ts
|
|
6
53
|
import { addGlobalUncaughtErrorHandler, registerMicroApps, start } from "qiankun";
|
|
7
54
|
var MicroAppManager = class {
|
|
@@ -158,8 +205,12 @@ export {
|
|
|
158
205
|
getMicroApps,
|
|
159
206
|
hasMicroApps,
|
|
160
207
|
hasValidEntry,
|
|
208
|
+
isPoweredByMicro,
|
|
161
209
|
microAppManager,
|
|
210
|
+
qiankunWindow,
|
|
211
|
+
renderWithQiankun,
|
|
162
212
|
setupMicroPluginApps,
|
|
163
|
-
startMicroPluginApps
|
|
213
|
+
startMicroPluginApps,
|
|
214
|
+
useMicroAppLifecycle
|
|
164
215
|
};
|
|
165
216
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/setup.ts"],"sourcesContent":["/**\n * 微前端应用设置和启动模块\n * @module setup\n */\n\nimport type { FrameworkConfiguration } from 'qiankun'\nimport { addGlobalUncaughtErrorHandler, registerMicroApps, start } from 'qiankun'\nimport type { MicroAppDescriptor, MicroAppSetupOptions, MicroAppStartOptions } from './types'\n\n/**\n * 微前端管理器类\n * 负责管理微应用的注册、启动和生命周期\n */\nexport class MicroAppManager {\n /** 是否已注册微应用 */\n private hasRegistered = false\n\n /** 是否已启动微前端框架 */\n private hasStarted = false\n\n /** 微应用配置列表 */\n private apps: MicroAppDescriptor[] = []\n\n /** 启动配置选项 */\n private startOptions: MicroAppStartOptions = {}\n\n /** 自定义加载器函数 */\n private loader?: (loading: boolean) => void\n\n /** 自定义错误处理函数 */\n private onError?: (event: Event | string) => void\n\n /**\n * 检查是否有有效的微应用配置\n * @returns 是否存在有效的微应用\n */\n hasMicroApps(): boolean {\n return this.apps.length > 0\n }\n\n /**\n * 过滤出有效的微应用配置(必须有 entry)\n * @param apps 微应用配置列表\n * @returns 有效的微应用配置列表\n */\n private filterValidApps(apps: MicroAppDescriptor[]): MicroAppDescriptor[] {\n return apps.filter((app): app is MicroAppDescriptor & { entry: string } => {\n return typeof app.entry === 'string' && app.entry.length > 0\n })\n }\n\n /**\n * 设置微前端应用\n * @param options 设置选项\n */\n setup(options: MicroAppSetupOptions): void {\n if (this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用已经注册,跳过重复注册')\n return\n }\n\n // 过滤出有效的微应用配置\n this.apps = this.filterValidApps(options.apps)\n\n if (!this.hasMicroApps()) {\n console.warn('[x-micro-plugin] 没有有效的微应用配置,跳过注册')\n return\n }\n\n // 保存配置选项\n this.startOptions = options.startOptions || {}\n this.loader = options.loader\n this.onError = options.onError\n\n // 注册微应用\n this.registerMicroApps()\n\n // 设置全局错误处理\n this.setupErrorHandler()\n\n this.hasRegistered = true\n }\n\n /**\n * 注册微应用到 qiankun\n */\n private registerMicroApps(): void {\n registerMicroApps(\n this.apps.map(app => ({\n name: app.name,\n entry: app.entry!,\n container: `#${app.containerId}`,\n activeRule: app.activeRule,\n props: {\n ...app.props\n },\n loader: (loading: boolean) => {\n // 调用自定义加载器\n this.loader?.(loading)\n }\n }))\n )\n }\n\n /**\n * 设置全局错误处理\n */\n private setupErrorHandler(): void {\n addGlobalUncaughtErrorHandler((event: Event | string) => {\n // 调用自定义错误处理函数\n if (this.onError) {\n this.onError(event)\n } else {\n // 默认错误处理\n console.error('[x-micro-plugin] 微应用加载错误', event)\n // 尝试使用全局消息提示\n if (typeof window !== 'undefined' && (window as any).$message) {\n console.error('子应用加载失败,请稍后重试')\n }\n }\n })\n }\n\n /**\n * 启动微前端框架\n */\n start(): void {\n if (!this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用尚未注册,请先调用 setup() 方法')\n return\n }\n\n if (this.hasStarted) {\n console.warn('[x-micro-plugin] 微前端框架已经启动,跳过重复启动')\n return\n }\n\n const startOpts: FrameworkConfiguration = {\n prefetch: this.startOptions.prefetch !== false, // 默认启用预加载\n sandbox: {\n experimentalStyleIsolation: this.startOptions.sandbox?.experimentalStyleIsolation ?? true,\n strictStyleIsolation: this.startOptions.sandbox?.strictStyleIsolation ?? false,\n ...this.startOptions.sandbox\n },\n ...this.startOptions\n }\n\n start(startOpts)\n\n this.hasStarted = true\n }\n\n /**\n * 获取已注册的微应用配置列表\n * @returns 微应用配置列表的只读副本\n */\n getApps(): ReadonlyArray<MicroAppDescriptor> {\n return [...this.apps]\n }\n\n /**\n * 重置管理器状态(主要用于测试)\n */\n reset(): void {\n this.hasRegistered = false\n this.hasStarted = false\n this.apps = []\n this.startOptions = {}\n this.loader = undefined\n this.onError = undefined\n }\n}\n\n/**\n * 全局微前端管理器实例\n */\nexport const microAppManager = new MicroAppManager()\n\n/**\n * 设置微前端应用(便捷函数)\n * @param options 设置选项\n */\nexport function setupMicroPluginApps(options: MicroAppSetupOptions): void {\n microAppManager.setup(options)\n}\n\n/**\n * 启动微前端框架(便捷函数)\n */\nexport function startMicroPluginApps(): void {\n microAppManager.start()\n}\n\n/**\n * 检查是否有微应用(便捷函数)\n * @returns 是否存在微应用\n */\nexport function hasMicroApps(): boolean {\n return microAppManager.hasMicroApps()\n}\n\n/**\n * 获取微应用配置列表(便捷函数)\n * @returns 微应用配置列表\n */\nexport function getMicroApps(): ReadonlyArray<MicroAppDescriptor> {\n return microAppManager.getApps()\n}\n\n/**\n * 类型守卫:检查微应用是否有有效的入口地址\n * @param app 微应用描述符\n * @returns 是否为有效的微应用(有入口地址)\n */\nexport function hasValidEntry(app: MicroAppDescriptor): app is MicroAppDescriptor & { entry: string } {\n return typeof app.entry === 'string' && app.entry.length > 0\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/helper.ts","../src/setup.ts"],"sourcesContent":["import type { QiankunLifeCycle, QiankunProps, QiankunWindow, UseMicroAppOptions } from './types'\n\n// @ts-ignore\nexport const qiankunWindow: QiankunWindow = typeof window !== 'undefined' ? window.proxy || window : {}\n\nexport const renderWithQiankun = (qiankunLifeCycle: QiankunLifeCycle) => {\n // 函数只有一次执行机会,需要把生命周期赋值给全局\n if (qiankunWindow?.__POWERED_BY_QIANKUN__) {\n // @ts-ignore\n if (!window.moudleQiankunAppLifeCycles) {\n // @ts-ignore\n window.moudleQiankunAppLifeCycles = {}\n }\n // @ts-ignore\n if (qiankunWindow.qiankunName) {\n // @ts-ignore\n window.moudleQiankunAppLifeCycles[qiankunWindow.qiankunName] = qiankunLifeCycle\n }\n }\n}\n\n/**\n * Check if the app is running under Qiankun\n * @returns Whether the app is running under Qiankun\n */\nexport function isPoweredByMicro() {\n return qiankunWindow.__POWERED_BY_QIANKUN__\n}\n\n/**\n * Encapsulate Qiankun micro-frontend lifecycle wiring into a reusable hook\n */\nexport function useMicroAppLifecycle({ mount, unmount, update, bootstrap }: UseMicroAppOptions) {\n /** Mount logic for the micro app */\n const mountMicroApp = async (props?: QiankunProps) => {\n await mount?.(props)\n }\n\n /** Cleanup logic when Qiankun unmounts the micro app */\n const unmountMicroApp = async (props?: QiankunProps) => {\n await unmount?.(props)\n }\n\n /** Update logic for the micro app */\n const updateMicroApp = async (props?: QiankunProps) => {\n await update?.(props)\n }\n\n /** Bootstrap logic for the micro app */\n const bootstrapMicroApp = async () => {\n await bootstrap?.()\n }\n\n if (!isPoweredByMicro()) {\n void mountMicroApp()\n }\n\n renderWithQiankun({\n async bootstrap() {\n await bootstrapMicroApp()\n },\n async mount(props) {\n await mountMicroApp(props)\n },\n async unmount(props) {\n await unmountMicroApp(props)\n },\n async update(props) {\n await updateMicroApp(props)\n }\n })\n}\n","/**\n * 微前端应用设置和启动模块\n * @module setup\n */\n\nimport type { FrameworkConfiguration } from 'qiankun'\nimport { addGlobalUncaughtErrorHandler, registerMicroApps, start } from 'qiankun'\nimport type { MicroAppDescriptor, MicroAppSetupOptions, MicroAppStartOptions } from './types'\n\n/**\n * 微前端管理器类\n * 负责管理微应用的注册、启动和生命周期\n */\nexport class MicroAppManager {\n /** 是否已注册微应用 */\n private hasRegistered = false\n\n /** 是否已启动微前端框架 */\n private hasStarted = false\n\n /** 微应用配置列表 */\n private apps: MicroAppDescriptor[] = []\n\n /** 启动配置选项 */\n private startOptions: MicroAppStartOptions = {}\n\n /** 自定义加载器函数 */\n private loader?: (loading: boolean) => void\n\n /** 自定义错误处理函数 */\n private onError?: (event: Event | string) => void\n\n /**\n * 检查是否有有效的微应用配置\n * @returns 是否存在有效的微应用\n */\n hasMicroApps(): boolean {\n return this.apps.length > 0\n }\n\n /**\n * 过滤出有效的微应用配置(必须有 entry)\n * @param apps 微应用配置列表\n * @returns 有效的微应用配置列表\n */\n private filterValidApps(apps: MicroAppDescriptor[]): MicroAppDescriptor[] {\n return apps.filter((app): app is MicroAppDescriptor & { entry: string } => {\n return typeof app.entry === 'string' && app.entry.length > 0\n })\n }\n\n /**\n * 设置微前端应用\n * @param options 设置选项\n */\n setup(options: MicroAppSetupOptions): void {\n if (this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用已经注册,跳过重复注册')\n return\n }\n\n // 过滤出有效的微应用配置\n this.apps = this.filterValidApps(options.apps)\n\n if (!this.hasMicroApps()) {\n console.warn('[x-micro-plugin] 没有有效的微应用配置,跳过注册')\n return\n }\n\n // 保存配置选项\n this.startOptions = options.startOptions || {}\n this.loader = options.loader\n this.onError = options.onError\n\n // 注册微应用\n this.registerMicroApps()\n\n // 设置全局错误处理\n this.setupErrorHandler()\n\n this.hasRegistered = true\n }\n\n /**\n * 注册微应用到 qiankun\n */\n private registerMicroApps(): void {\n registerMicroApps(\n this.apps.map(app => ({\n name: app.name,\n entry: app.entry!,\n container: `#${app.containerId}`,\n activeRule: app.activeRule,\n props: {\n ...app.props\n },\n loader: (loading: boolean) => {\n // 调用自定义加载器\n this.loader?.(loading)\n }\n }))\n )\n }\n\n /**\n * 设置全局错误处理\n */\n private setupErrorHandler(): void {\n addGlobalUncaughtErrorHandler((event: Event | string) => {\n // 调用自定义错误处理函数\n if (this.onError) {\n this.onError(event)\n } else {\n // 默认错误处理\n console.error('[x-micro-plugin] 微应用加载错误', event)\n // 尝试使用全局消息提示\n if (typeof window !== 'undefined' && (window as any).$message) {\n console.error('子应用加载失败,请稍后重试')\n }\n }\n })\n }\n\n /**\n * 启动微前端框架\n */\n start(): void {\n if (!this.hasRegistered) {\n console.warn('[x-micro-plugin] 微应用尚未注册,请先调用 setup() 方法')\n return\n }\n\n if (this.hasStarted) {\n console.warn('[x-micro-plugin] 微前端框架已经启动,跳过重复启动')\n return\n }\n\n const startOpts: FrameworkConfiguration = {\n prefetch: this.startOptions.prefetch !== false, // 默认启用预加载\n sandbox: {\n experimentalStyleIsolation: this.startOptions.sandbox?.experimentalStyleIsolation ?? true,\n strictStyleIsolation: this.startOptions.sandbox?.strictStyleIsolation ?? false,\n ...this.startOptions.sandbox\n },\n ...this.startOptions\n }\n\n start(startOpts)\n\n this.hasStarted = true\n }\n\n /**\n * 获取已注册的微应用配置列表\n * @returns 微应用配置列表的只读副本\n */\n getApps(): ReadonlyArray<MicroAppDescriptor> {\n return [...this.apps]\n }\n\n /**\n * 重置管理器状态(主要用于测试)\n */\n reset(): void {\n this.hasRegistered = false\n this.hasStarted = false\n this.apps = []\n this.startOptions = {}\n this.loader = undefined\n this.onError = undefined\n }\n}\n\n/**\n * 全局微前端管理器实例\n */\nexport const microAppManager = new MicroAppManager()\n\n/**\n * 设置微前端应用(便捷函数)\n * @param options 设置选项\n */\nexport function setupMicroPluginApps(options: MicroAppSetupOptions): void {\n microAppManager.setup(options)\n}\n\n/**\n * 启动微前端框架(便捷函数)\n */\nexport function startMicroPluginApps(): void {\n microAppManager.start()\n}\n\n/**\n * 检查是否有微应用(便捷函数)\n * @returns 是否存在微应用\n */\nexport function hasMicroApps(): boolean {\n return microAppManager.hasMicroApps()\n}\n\n/**\n * 获取微应用配置列表(便捷函数)\n * @returns 微应用配置列表\n */\nexport function getMicroApps(): ReadonlyArray<MicroAppDescriptor> {\n return microAppManager.getApps()\n}\n\n/**\n * 类型守卫:检查微应用是否有有效的入口地址\n * @param app 微应用描述符\n * @returns 是否为有效的微应用(有入口地址)\n */\nexport function hasValidEntry(app: MicroAppDescriptor): app is MicroAppDescriptor & { entry: string } {\n return typeof app.entry === 'string' && app.entry.length > 0\n}\n"],"mappings":"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","names":[]}
|
package/dist/plugin.cjs
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/plugin.ts
|
|
31
|
+
var plugin_exports = {};
|
|
32
|
+
__export(plugin_exports, {
|
|
33
|
+
setupMicroApp: () => setupMicroApp
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(plugin_exports);
|
|
36
|
+
var import_cheerio = __toESM(require("cheerio"), 1);
|
|
37
|
+
var createQiankunHelper = (qiankunName) => `
|
|
38
|
+
const createDeffer = (hookName) => {
|
|
39
|
+
const d = new Promise((resolve, reject) => {
|
|
40
|
+
window.proxy && (window.proxy[\`vite\${hookName}\`] = resolve)
|
|
41
|
+
})
|
|
42
|
+
return props => d.then(fn => fn(props));
|
|
43
|
+
}
|
|
44
|
+
const bootstrap = createDeffer('bootstrap');
|
|
45
|
+
const mount = createDeffer('mount');
|
|
46
|
+
const unmount = createDeffer('unmount');
|
|
47
|
+
const update = createDeffer('update');
|
|
48
|
+
|
|
49
|
+
;(global => {
|
|
50
|
+
global.qiankunName = '${qiankunName}';
|
|
51
|
+
global['${qiankunName}'] = {
|
|
52
|
+
bootstrap,
|
|
53
|
+
mount,
|
|
54
|
+
unmount,
|
|
55
|
+
update
|
|
56
|
+
};
|
|
57
|
+
})(window);
|
|
58
|
+
`;
|
|
59
|
+
var createImportFinallyResolve = (qiankunName) => {
|
|
60
|
+
return `
|
|
61
|
+
const qiankunLifeCycle = window.moudleQiankunAppLifeCycles && window.moudleQiankunAppLifeCycles['${qiankunName}'];
|
|
62
|
+
if (qiankunLifeCycle) {
|
|
63
|
+
window.proxy.vitemount((props) => qiankunLifeCycle.mount(props));
|
|
64
|
+
window.proxy.viteunmount((props) => qiankunLifeCycle.unmount(props));
|
|
65
|
+
window.proxy.vitebootstrap(() => qiankunLifeCycle.bootstrap());
|
|
66
|
+
window.proxy.viteupdate((props) => qiankunLifeCycle.update(props));
|
|
67
|
+
}
|
|
68
|
+
`;
|
|
69
|
+
};
|
|
70
|
+
function setupMicroApp(qiankunName, microOption = { useDevMode: true }) {
|
|
71
|
+
let isProduction;
|
|
72
|
+
let base = "";
|
|
73
|
+
const module2DynamicImport = ($, scriptTag) => {
|
|
74
|
+
if (!scriptTag) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const script$ = $(scriptTag);
|
|
78
|
+
const moduleSrc = script$.attr("src");
|
|
79
|
+
let appendBase = "";
|
|
80
|
+
if (microOption.useDevMode && !isProduction) {
|
|
81
|
+
appendBase = "(window.proxy ? (window.proxy.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ + '..') : '') + ";
|
|
82
|
+
}
|
|
83
|
+
script$.removeAttr("src");
|
|
84
|
+
script$.removeAttr("type");
|
|
85
|
+
script$.html(`import(${appendBase}'${moduleSrc}')`);
|
|
86
|
+
return script$;
|
|
87
|
+
};
|
|
88
|
+
const plugin = {
|
|
89
|
+
name: "qiankun-html-transform",
|
|
90
|
+
configResolved(config) {
|
|
91
|
+
isProduction = config.command === "build" || config.isProduction;
|
|
92
|
+
base = config.base;
|
|
93
|
+
},
|
|
94
|
+
configureServer(server) {
|
|
95
|
+
return () => {
|
|
96
|
+
server.middlewares.use((req, res, next) => {
|
|
97
|
+
if (isProduction || !microOption.useDevMode) {
|
|
98
|
+
next();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const end = res.end.bind(res);
|
|
102
|
+
res.end = (...args) => {
|
|
103
|
+
const [chunk, ...rest] = args;
|
|
104
|
+
let htmlStr = chunk;
|
|
105
|
+
if (typeof htmlStr === "string") {
|
|
106
|
+
const $ = import_cheerio.default.load(htmlStr);
|
|
107
|
+
module2DynamicImport($, $(`script[src=${base}@vite/client]`).get(0));
|
|
108
|
+
htmlStr = $.html();
|
|
109
|
+
}
|
|
110
|
+
end(htmlStr, ...rest);
|
|
111
|
+
};
|
|
112
|
+
next();
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
transformIndexHtml(html) {
|
|
117
|
+
const $ = import_cheerio.default.load(html);
|
|
118
|
+
const moduleTags = $('body script[type=module], head script[crossorigin=""]');
|
|
119
|
+
if (!moduleTags || !moduleTags.length) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const len = moduleTags.length;
|
|
123
|
+
moduleTags.each((i, moduleTag) => {
|
|
124
|
+
const script$ = module2DynamicImport($, moduleTag);
|
|
125
|
+
if (len - 1 === i) {
|
|
126
|
+
script$ == null ? void 0 : script$.html(`${script$.html()}.finally(() => {
|
|
127
|
+
${createImportFinallyResolve(qiankunName)}
|
|
128
|
+
})`);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
$("body").append(`<script>${createQiankunHelper(qiankunName)}</script>`);
|
|
132
|
+
const output = $.html();
|
|
133
|
+
return output;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
return plugin;
|
|
137
|
+
}
|
|
138
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
139
|
+
0 && (module.exports = {
|
|
140
|
+
setupMicroApp
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=plugin.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { CheerioAPI } from 'cheerio'\nimport cheerio from 'cheerio'\nimport type { Element } from 'domhandler'\nimport type { Plugin } from 'vite'\n\nconst createQiankunHelper = (qiankunName: string) => `\n const createDeffer = (hookName) => {\n const d = new Promise((resolve, reject) => {\n window.proxy && (window.proxy[\\`vite\\${hookName}\\`] = resolve)\n })\n return props => d.then(fn => fn(props));\n }\n const bootstrap = createDeffer('bootstrap');\n const mount = createDeffer('mount');\n const unmount = createDeffer('unmount');\n const update = createDeffer('update');\n\n ;(global => {\n global.qiankunName = '${qiankunName}';\n global['${qiankunName}'] = {\n bootstrap,\n mount,\n unmount,\n update\n };\n })(window);\n`\n\nconst createImportFinallyResolve = (qiankunName: string) => {\n return `\n const qiankunLifeCycle = window.moudleQiankunAppLifeCycles && window.moudleQiankunAppLifeCycles['${qiankunName}'];\n if (qiankunLifeCycle) {\n window.proxy.vitemount((props) => qiankunLifeCycle.mount(props));\n window.proxy.viteunmount((props) => qiankunLifeCycle.unmount(props));\n window.proxy.vitebootstrap(() => qiankunLifeCycle.bootstrap());\n window.proxy.viteupdate((props) => qiankunLifeCycle.update(props));\n }\n `\n}\n\nexport interface MicroOption {\n useDevMode?: boolean\n}\n\nexport function setupMicroApp(qiankunName: string, microOption: MicroOption = { useDevMode: true }) {\n let isProduction: boolean\n let base = ''\n\n const module2DynamicImport = ($: CheerioAPI, scriptTag: Element | undefined) => {\n if (!scriptTag) {\n return\n }\n const script$ = $(scriptTag)\n const moduleSrc = script$.attr('src')\n let appendBase = ''\n if (microOption.useDevMode && !isProduction) {\n appendBase = \"(window.proxy ? (window.proxy.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ + '..') : '') + \"\n }\n script$.removeAttr('src')\n script$.removeAttr('type')\n script$.html(`import(${appendBase}'${moduleSrc}')`)\n return script$\n }\n\n const plugin: Plugin = {\n name: 'qiankun-html-transform',\n configResolved(config) {\n isProduction = config.command === 'build' || config.isProduction\n base = config.base\n },\n\n configureServer(server) {\n return () => {\n server.middlewares.use((req, res, next) => {\n if (isProduction || !microOption.useDevMode) {\n next()\n return\n }\n const end = res.end.bind(res)\n // @ts-ignore\n res.end = (...args: any[]) => {\n const [chunk, ...rest] = args\n let htmlStr = chunk\n if (typeof htmlStr === 'string') {\n const $ = cheerio.load(htmlStr)\n module2DynamicImport($, $(`script[src=${base}@vite/client]`).get(0))\n htmlStr = $.html()\n }\n end(htmlStr, ...rest)\n }\n next()\n })\n }\n },\n transformIndexHtml(html: string) {\n const $ = cheerio.load(html)\n const moduleTags = $('body script[type=module], head script[crossorigin=\"\"]')\n if (!moduleTags || !moduleTags.length) {\n return\n }\n const len = moduleTags.length\n moduleTags.each((i, moduleTag) => {\n const script$ = module2DynamicImport($, moduleTag)\n if (len - 1 === i) {\n script$?.html(`${script$.html()}.finally(() => {\n ${createImportFinallyResolve(qiankunName)}\n })`)\n }\n })\n\n $('body').append(`<script>${createQiankunHelper(qiankunName)}</script>`)\n const output = $.html()\n return output\n }\n }\n\n return plugin\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAoB;AAIpB,IAAM,sBAAsB,CAAC,gBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAazB,WAAW;AAAA,cACzB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzB,IAAM,6BAA6B,CAAC,gBAAwB;AAC1D,SAAO;AAAA,uGAC8F,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQlH;AAMO,SAAS,cAAc,aAAqB,cAA2B,EAAE,YAAY,KAAK,GAAG;AAClG,MAAI;AACJ,MAAI,OAAO;AAEX,QAAM,uBAAuB,CAAC,GAAe,cAAmC;AAC9E,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,UAAM,UAAU,EAAE,SAAS;AAC3B,UAAM,YAAY,QAAQ,KAAK,KAAK;AACpC,QAAI,aAAa;AACjB,QAAI,YAAY,cAAc,CAAC,cAAc;AAC3C,mBAAa;AAAA,IACf;AACA,YAAQ,WAAW,KAAK;AACxB,YAAQ,WAAW,MAAM;AACzB,YAAQ,KAAK,UAAU,UAAU,IAAI,SAAS,IAAI;AAClD,WAAO;AAAA,EACT;AAEA,QAAM,SAAiB;AAAA,IACrB,MAAM;AAAA,IACN,eAAe,QAAQ;AACrB,qBAAe,OAAO,YAAY,WAAW,OAAO;AACpD,aAAO,OAAO;AAAA,IAChB;AAAA,IAEA,gBAAgB,QAAQ;AACtB,aAAO,MAAM;AACX,eAAO,YAAY,IAAI,CAAC,KAAK,KAAK,SAAS;AACzC,cAAI,gBAAgB,CAAC,YAAY,YAAY;AAC3C,iBAAK;AACL;AAAA,UACF;AACA,gBAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAE5B,cAAI,MAAM,IAAI,SAAgB;AAC5B,kBAAM,CAAC,OAAO,GAAG,IAAI,IAAI;AACzB,gBAAI,UAAU;AACd,gBAAI,OAAO,YAAY,UAAU;AAC/B,oBAAM,IAAI,eAAAA,QAAQ,KAAK,OAAO;AAC9B,mCAAqB,GAAG,EAAE,cAAc,IAAI,eAAe,EAAE,IAAI,CAAC,CAAC;AACnE,wBAAU,EAAE,KAAK;AAAA,YACnB;AACA,gBAAI,SAAS,GAAG,IAAI;AAAA,UACtB;AACA,eAAK;AAAA,QACP,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,mBAAmB,MAAc;AAC/B,YAAM,IAAI,eAAAA,QAAQ,KAAK,IAAI;AAC3B,YAAM,aAAa,EAAE,uDAAuD;AAC5E,UAAI,CAAC,cAAc,CAAC,WAAW,QAAQ;AACrC;AAAA,MACF;AACA,YAAM,MAAM,WAAW;AACvB,iBAAW,KAAK,CAAC,GAAG,cAAc;AAChC,cAAM,UAAU,qBAAqB,GAAG,SAAS;AACjD,YAAI,MAAM,MAAM,GAAG;AACjB,6CAAS,KAAK,GAAG,QAAQ,KAAK,CAAC;AAAA,cAC3B,2BAA2B,WAAW,CAAC;AAAA;AAAA,QAE7C;AAAA,MACF,CAAC;AAED,QAAE,MAAM,EAAE,OAAO,WAAW,oBAAoB,WAAW,CAAC,WAAW;AACvE,YAAM,SAAS,EAAE,KAAK;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":["cheerio"]}
|
package/dist/plugin.d.ts
ADDED
package/dist/plugin.mjs
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// src/plugin.ts
|
|
2
|
+
import cheerio from "cheerio";
|
|
3
|
+
var createQiankunHelper = (qiankunName) => `
|
|
4
|
+
const createDeffer = (hookName) => {
|
|
5
|
+
const d = new Promise((resolve, reject) => {
|
|
6
|
+
window.proxy && (window.proxy[\`vite\${hookName}\`] = resolve)
|
|
7
|
+
})
|
|
8
|
+
return props => d.then(fn => fn(props));
|
|
9
|
+
}
|
|
10
|
+
const bootstrap = createDeffer('bootstrap');
|
|
11
|
+
const mount = createDeffer('mount');
|
|
12
|
+
const unmount = createDeffer('unmount');
|
|
13
|
+
const update = createDeffer('update');
|
|
14
|
+
|
|
15
|
+
;(global => {
|
|
16
|
+
global.qiankunName = '${qiankunName}';
|
|
17
|
+
global['${qiankunName}'] = {
|
|
18
|
+
bootstrap,
|
|
19
|
+
mount,
|
|
20
|
+
unmount,
|
|
21
|
+
update
|
|
22
|
+
};
|
|
23
|
+
})(window);
|
|
24
|
+
`;
|
|
25
|
+
var createImportFinallyResolve = (qiankunName) => {
|
|
26
|
+
return `
|
|
27
|
+
const qiankunLifeCycle = window.moudleQiankunAppLifeCycles && window.moudleQiankunAppLifeCycles['${qiankunName}'];
|
|
28
|
+
if (qiankunLifeCycle) {
|
|
29
|
+
window.proxy.vitemount((props) => qiankunLifeCycle.mount(props));
|
|
30
|
+
window.proxy.viteunmount((props) => qiankunLifeCycle.unmount(props));
|
|
31
|
+
window.proxy.vitebootstrap(() => qiankunLifeCycle.bootstrap());
|
|
32
|
+
window.proxy.viteupdate((props) => qiankunLifeCycle.update(props));
|
|
33
|
+
}
|
|
34
|
+
`;
|
|
35
|
+
};
|
|
36
|
+
function setupMicroApp(qiankunName, microOption = { useDevMode: true }) {
|
|
37
|
+
let isProduction;
|
|
38
|
+
let base = "";
|
|
39
|
+
const module2DynamicImport = ($, scriptTag) => {
|
|
40
|
+
if (!scriptTag) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const script$ = $(scriptTag);
|
|
44
|
+
const moduleSrc = script$.attr("src");
|
|
45
|
+
let appendBase = "";
|
|
46
|
+
if (microOption.useDevMode && !isProduction) {
|
|
47
|
+
appendBase = "(window.proxy ? (window.proxy.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ + '..') : '') + ";
|
|
48
|
+
}
|
|
49
|
+
script$.removeAttr("src");
|
|
50
|
+
script$.removeAttr("type");
|
|
51
|
+
script$.html(`import(${appendBase}'${moduleSrc}')`);
|
|
52
|
+
return script$;
|
|
53
|
+
};
|
|
54
|
+
const plugin = {
|
|
55
|
+
name: "qiankun-html-transform",
|
|
56
|
+
configResolved(config) {
|
|
57
|
+
isProduction = config.command === "build" || config.isProduction;
|
|
58
|
+
base = config.base;
|
|
59
|
+
},
|
|
60
|
+
configureServer(server) {
|
|
61
|
+
return () => {
|
|
62
|
+
server.middlewares.use((req, res, next) => {
|
|
63
|
+
if (isProduction || !microOption.useDevMode) {
|
|
64
|
+
next();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const end = res.end.bind(res);
|
|
68
|
+
res.end = (...args) => {
|
|
69
|
+
const [chunk, ...rest] = args;
|
|
70
|
+
let htmlStr = chunk;
|
|
71
|
+
if (typeof htmlStr === "string") {
|
|
72
|
+
const $ = cheerio.load(htmlStr);
|
|
73
|
+
module2DynamicImport($, $(`script[src=${base}@vite/client]`).get(0));
|
|
74
|
+
htmlStr = $.html();
|
|
75
|
+
}
|
|
76
|
+
end(htmlStr, ...rest);
|
|
77
|
+
};
|
|
78
|
+
next();
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
transformIndexHtml(html) {
|
|
83
|
+
const $ = cheerio.load(html);
|
|
84
|
+
const moduleTags = $('body script[type=module], head script[crossorigin=""]');
|
|
85
|
+
if (!moduleTags || !moduleTags.length) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const len = moduleTags.length;
|
|
89
|
+
moduleTags.each((i, moduleTag) => {
|
|
90
|
+
const script$ = module2DynamicImport($, moduleTag);
|
|
91
|
+
if (len - 1 === i) {
|
|
92
|
+
script$ == null ? void 0 : script$.html(`${script$.html()}.finally(() => {
|
|
93
|
+
${createImportFinallyResolve(qiankunName)}
|
|
94
|
+
})`);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
$("body").append(`<script>${createQiankunHelper(qiankunName)}</script>`);
|
|
98
|
+
const output = $.html();
|
|
99
|
+
return output;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return plugin;
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
setupMicroApp
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=plugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { CheerioAPI } from 'cheerio'\nimport cheerio from 'cheerio'\nimport type { Element } from 'domhandler'\nimport type { Plugin } from 'vite'\n\nconst createQiankunHelper = (qiankunName: string) => `\n const createDeffer = (hookName) => {\n const d = new Promise((resolve, reject) => {\n window.proxy && (window.proxy[\\`vite\\${hookName}\\`] = resolve)\n })\n return props => d.then(fn => fn(props));\n }\n const bootstrap = createDeffer('bootstrap');\n const mount = createDeffer('mount');\n const unmount = createDeffer('unmount');\n const update = createDeffer('update');\n\n ;(global => {\n global.qiankunName = '${qiankunName}';\n global['${qiankunName}'] = {\n bootstrap,\n mount,\n unmount,\n update\n };\n })(window);\n`\n\nconst createImportFinallyResolve = (qiankunName: string) => {\n return `\n const qiankunLifeCycle = window.moudleQiankunAppLifeCycles && window.moudleQiankunAppLifeCycles['${qiankunName}'];\n if (qiankunLifeCycle) {\n window.proxy.vitemount((props) => qiankunLifeCycle.mount(props));\n window.proxy.viteunmount((props) => qiankunLifeCycle.unmount(props));\n window.proxy.vitebootstrap(() => qiankunLifeCycle.bootstrap());\n window.proxy.viteupdate((props) => qiankunLifeCycle.update(props));\n }\n `\n}\n\nexport interface MicroOption {\n useDevMode?: boolean\n}\n\nexport function setupMicroApp(qiankunName: string, microOption: MicroOption = { useDevMode: true }) {\n let isProduction: boolean\n let base = ''\n\n const module2DynamicImport = ($: CheerioAPI, scriptTag: Element | undefined) => {\n if (!scriptTag) {\n return\n }\n const script$ = $(scriptTag)\n const moduleSrc = script$.attr('src')\n let appendBase = ''\n if (microOption.useDevMode && !isProduction) {\n appendBase = \"(window.proxy ? (window.proxy.__INJECTED_PUBLIC_PATH_BY_QIANKUN__ + '..') : '') + \"\n }\n script$.removeAttr('src')\n script$.removeAttr('type')\n script$.html(`import(${appendBase}'${moduleSrc}')`)\n return script$\n }\n\n const plugin: Plugin = {\n name: 'qiankun-html-transform',\n configResolved(config) {\n isProduction = config.command === 'build' || config.isProduction\n base = config.base\n },\n\n configureServer(server) {\n return () => {\n server.middlewares.use((req, res, next) => {\n if (isProduction || !microOption.useDevMode) {\n next()\n return\n }\n const end = res.end.bind(res)\n // @ts-ignore\n res.end = (...args: any[]) => {\n const [chunk, ...rest] = args\n let htmlStr = chunk\n if (typeof htmlStr === 'string') {\n const $ = cheerio.load(htmlStr)\n module2DynamicImport($, $(`script[src=${base}@vite/client]`).get(0))\n htmlStr = $.html()\n }\n end(htmlStr, ...rest)\n }\n next()\n })\n }\n },\n transformIndexHtml(html: string) {\n const $ = cheerio.load(html)\n const moduleTags = $('body script[type=module], head script[crossorigin=\"\"]')\n if (!moduleTags || !moduleTags.length) {\n return\n }\n const len = moduleTags.length\n moduleTags.each((i, moduleTag) => {\n const script$ = module2DynamicImport($, moduleTag)\n if (len - 1 === i) {\n script$?.html(`${script$.html()}.finally(() => {\n ${createImportFinallyResolve(qiankunName)}\n })`)\n }\n })\n\n $('body').append(`<script>${createQiankunHelper(qiankunName)}</script>`)\n const output = $.html()\n return output\n }\n }\n\n return plugin\n}\n"],"mappings":";AACA,OAAO,aAAa;AAIpB,IAAM,sBAAsB,CAAC,gBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAazB,WAAW;AAAA,cACzB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzB,IAAM,6BAA6B,CAAC,gBAAwB;AAC1D,SAAO;AAAA,uGAC8F,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQlH;AAMO,SAAS,cAAc,aAAqB,cAA2B,EAAE,YAAY,KAAK,GAAG;AAClG,MAAI;AACJ,MAAI,OAAO;AAEX,QAAM,uBAAuB,CAAC,GAAe,cAAmC;AAC9E,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,UAAM,UAAU,EAAE,SAAS;AAC3B,UAAM,YAAY,QAAQ,KAAK,KAAK;AACpC,QAAI,aAAa;AACjB,QAAI,YAAY,cAAc,CAAC,cAAc;AAC3C,mBAAa;AAAA,IACf;AACA,YAAQ,WAAW,KAAK;AACxB,YAAQ,WAAW,MAAM;AACzB,YAAQ,KAAK,UAAU,UAAU,IAAI,SAAS,IAAI;AAClD,WAAO;AAAA,EACT;AAEA,QAAM,SAAiB;AAAA,IACrB,MAAM;AAAA,IACN,eAAe,QAAQ;AACrB,qBAAe,OAAO,YAAY,WAAW,OAAO;AACpD,aAAO,OAAO;AAAA,IAChB;AAAA,IAEA,gBAAgB,QAAQ;AACtB,aAAO,MAAM;AACX,eAAO,YAAY,IAAI,CAAC,KAAK,KAAK,SAAS;AACzC,cAAI,gBAAgB,CAAC,YAAY,YAAY;AAC3C,iBAAK;AACL;AAAA,UACF;AACA,gBAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAE5B,cAAI,MAAM,IAAI,SAAgB;AAC5B,kBAAM,CAAC,OAAO,GAAG,IAAI,IAAI;AACzB,gBAAI,UAAU;AACd,gBAAI,OAAO,YAAY,UAAU;AAC/B,oBAAM,IAAI,QAAQ,KAAK,OAAO;AAC9B,mCAAqB,GAAG,EAAE,cAAc,IAAI,eAAe,EAAE,IAAI,CAAC,CAAC;AACnE,wBAAU,EAAE,KAAK;AAAA,YACnB;AACA,gBAAI,SAAS,GAAG,IAAI;AAAA,UACtB;AACA,eAAK;AAAA,QACP,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,mBAAmB,MAAc;AAC/B,YAAM,IAAI,QAAQ,KAAK,IAAI;AAC3B,YAAM,aAAa,EAAE,uDAAuD;AAC5E,UAAI,CAAC,cAAc,CAAC,WAAW,QAAQ;AACrC;AAAA,MACF;AACA,YAAM,MAAM,WAAW;AACvB,iBAAW,KAAK,CAAC,GAAG,cAAc;AAChC,cAAM,UAAU,qBAAqB,GAAG,SAAS;AACjD,YAAI,MAAM,MAAM,GAAG;AACjB,6CAAS,KAAK,GAAG,QAAQ,KAAK,CAAC;AAAA,cAC3B,2BAA2B,WAAW,CAAC;AAAA;AAAA,QAE7C;AAAA,MACF,CAAC;AAED,QAAE,MAAM,EAAE,OAAO,WAAW,oBAAoB,WAAW,CAAC,WAAW;AACvE,YAAM,SAAS,EAAE,KAAK;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maxax/x-plugins-micro",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Reusable micro-frontend plugin based on qiankun for Maxax projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -11,6 +11,11 @@
|
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"import": "./dist/index.mjs",
|
|
13
13
|
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./plugin": {
|
|
16
|
+
"types": "./dist/plugin.d.ts",
|
|
17
|
+
"import": "./dist/plugin.mjs",
|
|
18
|
+
"require": "./dist/plugin.cjs"
|
|
14
19
|
}
|
|
15
20
|
},
|
|
16
21
|
"files": [
|
|
@@ -33,6 +38,9 @@
|
|
|
33
38
|
"publishConfig": {
|
|
34
39
|
"access": "public"
|
|
35
40
|
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"cheerio": "^1.1.2"
|
|
43
|
+
},
|
|
36
44
|
"scripts": {
|
|
37
45
|
"bump-version": "maxax bump-version",
|
|
38
46
|
"dev": "tsup --watch",
|