Динамический импорт внутри угловой библиотеки 6 - PullRequest
0 голосов
/ 08 октября 2018

Я создал образец библиотеки Angular 6 с угловым кликом

  1. ng new test-lib
  2. ng g библиотека my-lib

Это дает мне базовую структуру с угловой библиотекой "my-lib" и примером приложения "test-lib", которое, я думаю, можно использовать для целей тестирования.

Внутри библиотеки я хочу использовать динамическийимпорт.У меня есть класс, который нужно импортировать лениво:

export class Lazy {
    print(): void {
        console.log('I am lazy');
    }
}

И у меня есть потребительский компонент:

export class MyLibComponent implements OnInit {

  async ngOnInit() {
    const lazyImport = await import(/* webpackChunkName: 'lazy' */ './lazy');
    new lazyImport.Lazy().print();
  }
}

Это более или менее об этом.Я использую «ng build my-lib» для компиляции библиотеки в папку dist.В tsconfig я изменил «модуль» на esnext, чтобы поддерживать динамический импорт.

Теперь я хочу использовать библиотеку внутри примера приложения, которая была сгенерирована cli.Поэтому внутри app.module.ts я импортирую модуль библиотеки, а в шаблоне app.component.ts добавляю соответствующий селектор.

Когда я сейчас создаю пример приложения с помощью «ng build» или начинаю с «ng serve», я вижу, что «lazy chunk» не генерируется.Это просто обычные main, polyfills, runtime, styles и vendor.Что мне не хватает?Разве невозможно использовать динамическую загрузку внутри библиотеки?

Когда я изменяю путь импорта внутри app.module.ts из скомпилированной папки dist

import { MyLibModule } from 'my-lib';

в библиотекиИсходный код

import { MyLibModule } from '../../projects/my-lib/src/public_api';

Создан ленивый блок get и все работает как положено.Но это, конечно, не то, что я хочу.Я хочу использовать скомпилированную библиотеку внутри совершенно другого проекта, где я не могу импортировать из источников машинописного текста.

Редактировать: Краткое изложение моей проблемы
Может ли библиотека сама выполнять динамическую загрузку или эта функция работает только для main-app для отложенной загрузки других частейприложения или дополнительных библиотек?!

Редактировать: Причина вопроса
Моя библиотека состоит из сотен сгенерированных классов машинописи.На случай использования требуется только несколько.Они должны быть загружены по требованию.

Спасибо за вашу помощь!
Stephan

1 Ответ

0 голосов
/ 08 октября 2018

Работает отлично, как задумано.Вам просто нужно собрать библиотеку, разместить ее там, где вам нужно, и использовать динамический метод import в другом проекте и обратиться к вашей собранной библиотеке с относительным путем.

Причина, по которой Angular-CLI не 'Сборка чанка происходит потому, что он уничтожает все, что не упоминается в исходном коде.Если ваш импорт не указывает на ленивый блок, он не видит причин для его создания, когда в приложении вызывается ng build или ng serve.Но ng build my-lib все равно будет явно собирать модуль.

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