es6-module-loader не может найти @ angular / core в Angular 6 - PullRequest
0 голосов
/ 16 ноября 2018

Я использовал этот es6-module-loader в проекте Angular 2, и он отлично работал для загрузки TypeScript модулей в режиме реального времени в веб-браузере. Сейчас я обновляю этот проект до Angular 6, но здесь зависимости не встречаются для imports загрузочного модуля. Например:

declare var SystemLoader:any;

export class DemoClass {
  constructor() {
    var source = "export class Foo { " +
    "constructor() { console.log('Created the ES6 class foo!'); } " +
    "execMethod() { console.log('Executed method!') }" +
    "}";

     SystemLoader.module(source, {name: _name}).then(function (module: any) {
        module.Foo.prototype.execMethod();
     }
  }
}

Этот предыдущий код работает в Angular 6. Он загрузит модуль Foo и напечатает эти строки в Console. Но если я получу модуль немного сложнее и добавлю import, например:

declare var SystemLoader:any;

export class DemoClass {
  constructor() {
    var source = "import {Component} from \"@angular/core\"; " +
    "export class Foo { " +
    "constructor() { console.log('Created the ES6 class foo!'); } " +
    "execMethod() { console.log('Executed method!') }" +
    "}";

     SystemLoader.module(source, {name: _name}).then(function (module: any) {
        module.Foo.prototype.execMethod();
     }
  }
}

Тогда он не будет работать и жалуется на error 404 loading @angular/core. Итак, в Angular 2 это не было проблемой, потому что все node_modules, необходимые для проекта, который загружен Angular как есть, но в Angular 6 кажется, что все эти зависимости показаны Webpack и разбиты все в одном большом толстом JavaScript файле. Итак, как мне обойти это Webpack упрощение, чтобы динамический модуль мог загружаться?

Edit:

Или, по крайней мере, образец для перехода с es6-module-loader (устарело) на es-module-loader с использованием того же процесса, который описан выше (загрузка исходного кода, компиляция [транспортация] и рендеринг на компьютере клиента).

1 Ответ

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

Я не знаком с angular 6, но проблема, похоже, связана с процессом разрешения модуля webpack, когда у загрузчика модуля нет возможности обнаружить эту зависимость модуля во время компиляции. может быть несколько способов решить эту проблему.

Вы можете просто отказаться от добавления @angular/core в качестве внешней зависимости , предполагая, что она объявлена ​​совместимым образом (как common-js, umd и т. Д.). Если это еще не объявлено, вы всегда можете создать обертку вокруг него, чтобы показать его, например, как common-js модуль.

Другой способ - получить точку с кодовым разделением для этой зависимости (либо с динамическим импортом, либо с require.ensure). Я не уверен, что это подойдет, но если соответствующий угловой загрузчик (тот, который анализирует исходный текст в исходный код) имеет шанс на работу, и его вывод представляет собой скомпилированный код, он может.

...