File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -62,8 +62,29 @@ export function generateRemotesConfig(isDev = false) {
6262 url = isDev ? project . devUrl : project . prodPath
6363 }
6464
65- // Module Federation 格式: name@url
66- remotes [ project . name ] = `${ project . name } @${ url } `
65+ // 使用 promise 语法动态加载脚本并从 window 对象获取容器
66+ // 这是因为 remotes 使用了 library: { type: 'window' } 配置
67+ const promiseCode = `promise new Promise((resolve, reject) => {
68+ if (typeof window.${ project . name } !== 'undefined') {
69+ return resolve(window.${ project . name } );
70+ }
71+ const script = document.createElement('script');
72+ script.src = '${ url } ';
73+ script.async = true;
74+ script.onload = () => {
75+ if (typeof window.${ project . name } !== 'undefined') {
76+ resolve(window.${ project . name } );
77+ } else {
78+ reject(new Error('Container ${ project . name } not found on window after loading script'));
79+ }
80+ };
81+ script.onerror = (error) => {
82+ reject(new Error('Failed to load remote entry: ${ url } '));
83+ };
84+ document.head.appendChild(script);
85+ })`
86+
87+ remotes [ project . name ] = promiseCode
6788 } )
6889
6990 return remotes
You can’t perform that action at this time.
0 commit comments