Angular 7 ERROR ReferenceError: SystemJS не определен - PullRequest
0 голосов
/ 15 ноября 2018

Я создаю угловой проект 7 с systemjs для динамической загрузки модуля.

Когда я пытаюсь использовать его, у меня появляется эта ошибка:

 ERROR ReferenceError: SystemJS is not defined

Мой package.jsonСодержит systemjs: 2.1.1

Я добавил путь systemjs к сценариям раздела в своем angular.json

"./node_modules/systemjs/dist/system.js"

Я объявил SystemJs для использования в моем сервисе:

declare const SystemJS;

и я пытаюсь использовать вот так, в этой функции:

loadModuleSystemJS(moduleInfo: ModuleData): Promise<any> {
    const url = this.source + moduleInfo.location;
    SystemJS.set('@angular/core', SystemJS.newModule(AngularCore));
    SystemJS.set('@angular/common', SystemJS.newModule(AngularCommon));
    SystemJS.set('@angular/router', SystemJS.newModule(AngularRouter));
    SystemJS.set('@angular/platform-browser/animations', SystemJS.newModule(BrowserAnimations));

    // now, import the new module
    return SystemJS.import(`${url}`).then((module) => {
      return this.compiler.compileModuleAndAllComponentsAsync(module[`${moduleInfo.moduleName}`]).then(compiled => {
        return module;
      });
    });
  }

Может быть, я что-то упустил,

Можете ли вы помочь мне?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Обязательно используйте этот выпуск: https://github.com/systemjs/systemjs/releases/tag/0.21.5 2.1.1 не совместим с прошлым API, насколько я могу судить.Кстати, в примере из ответа выше, однако, используется версия "0.21.4 Dev".

0 голосов
/ 08 мая 2019

Я ответил на это в соответствующем выпуске github: https://github.com/systemjs/systemjs/issues/1940#issuecomment-490280011

tldr: systemjs @ <2 имеет глобальную переменную <code>window.SystemJS, а systemjs @> = 2 - нет. Используйте window.System или System вместо SystemJS. Вам также необходимо следовать инструкциям в системном readme , чтобы ваша конфигурация веб-пакета не связывалась с вызовами System.import().

0 голосов
/ 15 ноября 2018

Начиная с Angular 6, вы должны указать абсолютный путь от node_modules.Примерно так:

{
  ...
  "projects": {
    "demo": {
      ...,
      "architect": {
        "build": {
          ...
          "options": {
            ...
            "scripts": [ "node_modules/systemjs/dist/system.js" ]
          },
          ...
        },
        ...
      }
    }
  },
  ...
}

Вот Sample StackBlitz для вашей ссылки.

Обратите внимание, что я использовал его в app.component.tsгде я вхожу typeof SystemJS.set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...