From 70b2c7b9f3e7d1f758c55f68950d10b8778965cc Mon Sep 17 00:00:00 2001 From: ClarkXia Date: Wed, 11 Feb 2026 16:01:13 +0800 Subject: [PATCH] fix: runtime library loading strategy --- packages/icestark/CHANGELOG.md | 19 +++++++++++++++++++ packages/icestark/package.json | 2 +- packages/icestark/src/apps.ts | 21 ++++++++++++++++++++- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 packages/icestark/CHANGELOG.md diff --git a/packages/icestark/CHANGELOG.md b/packages/icestark/CHANGELOG.md new file mode 100644 index 00000000..39e40882 --- /dev/null +++ b/packages/icestark/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +## [2.8.5] - 2026-02-11 + +### Added +- Added `independent` configuration option to `RuntimeConfig` interface +- Added smart loading strategy for runtime dependencies + +### Changed +- Enhanced `loaded` logic for runtime libraries with whitelist support +- Updated whitelist libraries to use proper casing: 'React', 'ReactDOM' +- Improved dependency loading for libraries that require React/ReactDOM re-initialization + +### Fixed +- Fixed runtime library loading strategy to properly handle independent dependencies +- Fixed version instance caching for non-whitelist libraries + +## [2.8.4] - Previous releases +- See git history for previous changes diff --git a/packages/icestark/package.json b/packages/icestark/package.json index 8fc2edb0..d7b7fdf2 100644 --- a/packages/icestark/package.json +++ b/packages/icestark/package.json @@ -1,6 +1,6 @@ { "name": "@ice/stark", - "version": "2.8.4", + "version": "2.8.5", "description": "Icestark is a JavaScript library for multiple projects, Ice workbench solution.", "scripts": { "build": "rm -rf lib && tsc", diff --git a/packages/icestark/src/apps.ts b/packages/icestark/src/apps.ts index be32eea0..93e950e6 100644 --- a/packages/icestark/src/apps.ts +++ b/packages/icestark/src/apps.ts @@ -47,6 +47,8 @@ export interface RuntimeConfig { url: string | string[]; library: string; version: string; + /** Force reload even if versioned instance exists */ + independent?: boolean; } export interface BaseConfig extends PathOption { @@ -114,6 +116,23 @@ function getAppNames() { return microApps.map((app) => app.name); } +function isRuntimeLibraryLoaded(config: RuntimeConfig): boolean { + if (config.independent) { + return false; + } + + const hasVersionedInstance = Boolean( + config.version && + config.library && + window[`${config.library}@${config.version}`], + ); + + const whitelistLibraries = ['React', 'ReactDOM']; + const isWhitelisted = whitelistLibraries.includes(config.library); + + return isWhitelisted ? hasVersionedInstance : false; +} + export function getMicroApps() { return microApps; } @@ -250,7 +269,7 @@ export async function loadAppModule(appConfig: AppConfig) { return { content: mainJs, type: AssetTypeEnum.RUNTIME, - loaded: Boolean(config.version && config.library && window[`${config.library}@${config.version}`]), + loaded: isRuntimeLibraryLoaded(config), library: config.library, version: config.version, };