Проблема при использовании webpack-5 libraryTarget:window
Я использую single-spa для создания своих приложений. Когда я загружал приложение с микро-интерфейсом, я не использовал SystemJS, как показано ниже:
export const runScript = async (url: string) => {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = url;
script.onload = resolve;
script.onerror = reject;
const firstScript = document.getElementsByTagName('script')[0];
(firstScript as any).parentNode.insertBefore(script, firstScript);
});
};
const loadApp = async (appPath: string) => {
try {
await runScript(`/${appPath}/index.js`);
console.log(appPath, '=', (window as any)[appPath]);
} catch {
console.log("load child app's javascript file error。");
}
return (window as any)[appPath];
};
singleSpa.registerApplication({
name: 'app1',
app: () => loadApp('app1'),
activeWhen: '/app1,
customProps: {
},
});
Итак, я использую
libraryTarget:'window'
в конфигурации webpack app1.
devServer: {
//...
libraryTarget:'window'
},
Он отлично работает, когда я использую webpack4.
Но когда я обновляю webpack до webpack-5, кажется, что что-то не так, выходной код, сгенерированный webpack, не может установить правильное значение для объекта окна.
webpack-4: отлично работает с webpack-4
webpack-5: ничего в объекте
Это проблема webpack-5?
1 ответ
Я лично использую webpack5 для своих компонентов single-spa-angular. я имею
umd
в виде
libraryTarget
"customWebpackConfig": {
"path": "./extra-webpack.config.js",
"libraryName": "mylib",
"libraryTarget": "umd"
}
https://github.com/milobella/application-web/blob/master/spa-menu/angular.json#L36-L37
И мое приложение хорошо здесь, под
window
при загрузке скрипта https://github.com/milobella/application-web/blob/master/portal/src/main.ts#L9