9

Мое приложение имеет компоненты, которые используют тяжелый внешний пакет (ag-сетка, около 1 МБ), который предоставляется в виде модуля углового2 (AgGridModule). Я хотел бы загрузить пакет только тогда, когда требуются его компоненты, поэтому мой ContentModule и все его подмодули ленивы загружены. Вся структура выглядит следующим образом:Поделитесь внешним модулем между ленивыми загруженными модулями в угловом2

enter image description here

Однако, когда я импортировать AgGridModule в обоих Submodule1 и Submodule3, он заканчивает тем, что входит в составленный JS дважды, делая как 1.chunk.js и 3.chunk. js большой. Я попытался импортировать его в ContentModule, но тогда подмодули не распознают компоненты, которые включены в AgGridModule, даже если я перечисляю их в свойстве exportsContentModule.

@NgModule({ 
    imports: [ 
    ContentRoutingModule, 
    SomeOtherModule, 
    AgGridModule.withComponents([]) 
    ], 
    exports: [ 
    // this is the component from AgGridModule that I use 
    AgGridNg2 
    ] 
}) 
export class ContentModule { } 

Есть ли способ разделить модуль между ленивыми нагруженными модулями, или раскрыть некоторые компоненты импортированного модуля ленивых нагруженных детям?

UPD: Создание общего модуля и импортировать его в подмодули не помогает, есть еще два фрагмента с около 1 МБ каждого: enter image description here

UPD2: Я решил проблему временно путем слияния Submodule1 и Submodule3 в единый модуль.

+0

Вы должны добавить весь массив 'AgGridModule' в массив экспорта. Вы можете экспортировать объявления только внутри вашего ContentModule или всех других модулей. – PierreDuc

+0

@PierreDuc no, экспорт всего 'AgGridModule' не решает его, компонент все еще не распознается. –

+0

Как вы в настоящее время создаете свою сборку? Угловой-кли? – AngularChef

ответ

0

Вы можете использовать SharedModule, где вы import, а также exportAgGridModule. У вас должен быть export полный модуль AgGridModule, а не только компоненты, которые вы используете.

Тогда вы можете просто importSharedModule в своих Submodule1 и Submodule3.

+0

К сожалению, это приводит к такому же результату. Все модули, которые используют SharedModule, генерируют фрагменты, которые включают всю аг-сетку. –

+0

Это означает, что в «AgGridModule» есть службы, и их необходимо добавить в AppModule. –

+0

Но я не пользуюсь никакими услугами из AgGridModule. Я использую только один из его компонентов. –

4

Вам нужно создать SharedAgGridModule:

@NgModule({ 
    imports: [ 
    AgGridModule.withComponents([]) 
    ], 
    exports: [ 
    ContentModule, 
    AgGridModule 
    ] 
}) 
export class SharedAgGridModule{} 

Затем вы должны импортировать этот модуль только для подмодулей, который использует AgGrid. Не нужно также импортировать ContentModule в эти подмодули, поскольку он экспортируется в этом модуле

+0

Как и в случае с ответом Сантану, к сожалению :(В любом случае, я не импортирую ContentModule в подмодули. –

0

Мы сталкиваемся с той же проблемой.

2 Решения

  1. Введен в импорт и экспорт него ShareModule. Sub module импортирует ShareModule. В принципе, ShareModule не имеет ленивой нагрузки.
  2. Слияние с тем же путем/модулем ленивая загрузка вместе.