Проблема при использовании 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

Другие вопросы по тегам