Divisão de Código e Múltiplos Pontos de Entrada
A partir da versão 21.0.0, Ignite UI for Angular suporta múltiplos pontos de entrada, permitindo melhor trete-de-árvore, divisão de código e carregamento preguiçoso de componentes. Essa melhoria arquitetural permite importar apenas os componentes e utilitários necessários, reduzindo significativamente o tamanho do pacote da sua aplicação.
Visão geral
Anteriormente, todos os componentes Ignite UI for Angular eram exportados de um único ponto de entrada (igniteui-angular). Embora conveniente, essa abordagem agrupava todos os componentes, dificultando que as ferramentas de build eliminassem código não utilizado de forma eficaz.
Com a nova arquitetura de múltiplos pontos de entrada, cada componente ou grupo de componentes relacionados tem seu próprio ponto de entrada dedicado. Isso permite que os empacotadores modernos:
- Ativar divisão de código- Cada componente pode ser carregado lentamente separadamente sob demanda
- Reduza o tamanho inicial do pacote- Importe apenas o que sua aplicação realmente precisa na carga inicial
- Melhorar o desempenho das builds- Grafos de dependência menores levam a builds mais rápidas
Benefits
✅ Divisão de Código- Cada componente é carregável de forma preguiçosa
✅ Pacotes iniciais menores- Importe apenas o que você precisa
✅ Melhor desempenho- Tamanhos individuais reduzidos significam tempos de carregamento mais rápidos
✅ Arquitetura Limpa- Sem dependências circulares
✅ Compatibilidade Retroativa Total- O ponto de entrada principal ainda funciona
✅ Importação de Grade Granular- Carregue apenas o tipo específico de grade que você precisa
Entry Points Structure
Core Entry Points
igniteui-angular/core- Utilidades, serviços e tipos de base centrais (por exemplo,)IgxOverlayServiceigniteui-angular/directives- Diretrizes comuns
Component Entry Points
Cada componente tem seu próprio ponto de entrada seguindo o padrãoigniteui-angular/<component-name>:
igniteui-angular/accordionigniteui-angular/action-stripigniteui-angular/avatarigniteui-angular/badgeigniteui-angular/bannerigniteui-angular/bottom-navigniteui-angular/buttonigniteui-angular/button-groupigniteui-angular/calendarigniteui-angular/cardigniteui-angular/carouseligniteui-angular/chatigniteui-angular/checkboxigniteui-angular/chipsigniteui-angular/comboigniteui-angular/date-pickerigniteui-angular/date-range-pickerigniteui-angular/dialogigniteui-angular/drop-downigniteui-angular/expansion-paneligniteui-angular/iconigniteui-angular/input-groupigniteui-angular/listigniteui-angular/navbarigniteui-angular/navigation-drawerigniteui-angular/paginatorigniteui-angular/progressbarigniteui-angular/query-builderigniteui-angular/radioigniteui-angular/selectigniteui-angular/simple-comboigniteui-angular/sliderigniteui-angular/snackbarigniteui-angular/splitterigniteui-angular/stepperigniteui-angular/switchigniteui-angular/tabsigniteui-angular/time-pickerigniteui-angular/toastigniteui-angular/tree
Grid Entry Points
Os componentes da grade são divididos em pontos de entrada granulares para a divisão ótima do código:
igniteui-angular/grids/core- Infraestrutura de grade compartilhada (colunas, barra de ferramentas, filtragem, ordenação, pipelines e utilidades)igniteui-angular/grids/grid- Componente de Grade de Dados (IgxGridComponent)igniteui-angular/grids/tree-grid- Componente de Grade de Árvore (IgxTreeGridComponent)igniteui-angular/grids/hierarchical-grid- Componente de Grade Hierárquica (IgxHierarchicalGridComponent,IgxRowIslandComponent)igniteui-angular/grids/pivot-grid- Pivot Grid component (IgxPivotGridComponent,IgxPivotDataSelectorComponent)
Migration
Automatic Migration
A abordagem recomendada é migrar suas importações automaticamente durante ong update processo. Ao atualizar para a versão 21.0.0, será solicitado que você migre as importações:
ng update igniteui-angular
Quando solicitado, escolha "Sim" para migrar importações para novos pontos de entrada para tamanhos ideais de pacotes.
Alternativamente, você pode rodar a migração separadamente:
ng update igniteui-angular --migrate-only --from=20.1.0 --to=21.0.0
Manual Migration
Se preferir migrar manualmente ou precisar atualizar importações específicas, siga este padrão:
Antes (v20.x e anteriores)
import {
IgxGridComponent,
IgxTreeGridComponent,
IgxInputDirective,
IgxBottomNavComponent,
Direction,
GridBaseAPIService,
IgxOverlayService,
IFilteringExpression
} from 'igniteui-angular';
After (v21.0.0)
import { IgxOverlayService } from 'igniteui-angular/core';
import { IFilteringExpression, GridBaseAPIService } from 'igniteui-angular/grids/core';
import { IgxGridComponent } from 'igniteui-angular/grids/grid';
import { IgxTreeGridComponent } from 'igniteui-angular/grids/tree-grid';
import { IgxInputDirective } from 'igniteui-angular/input-group';
import { IgxBottomNavComponent } from 'igniteui-angular/bottom-nav';
import { CarouselAnimationDirection } from 'igniteui-angular/carousel';
Type Renames
Para evitar conflitos de nomes com a nova arquitetura, alguns tipos foram renomeados:
Direction→CarouselAnimationDirection(no ponto de entrada do carrossel)
// Before
import { Direction } from 'igniteui-angular';
// After
import { CarouselAnimationDirection } from 'igniteui-angular/carousel';
Backwards Compatibility
O ponto de entrada principal (igniteui-angular) mantém total compatibilidade retroativa ao reexportar todos os pontos de entrada granulares. Você pode continuar usando as importações do ponto de entrada principal sem nenhuma alteração:
// This still works and will continue to work
import { IgxGridComponent, IgxButtonDirective } from 'igniteui-angular';
No entanto, recomendamos fortemente migrar para os novos pontos de entrada para aproveitar melhor o sacudir das árvores e tamanhos de feixes menores.
Usage Examples
Example 1: Simple Component Usage
Se você só precisa de um botão e uma entrada, importe apenas esses pontos de entrada:
import { Component } from '@angular/core';
import { IgxButtonDirective } from 'igniteui-angular/button';
import {
IgxInputGroupComponent,
IgxInputDirective,
IgxLabelDirective
} from 'igniteui-angular/input-group';
@Component({
selector: 'app-form',
standalone: true,
imports: [
IgxButtonDirective,
IgxInputGroupComponent,
IgxInputDirective,
IgxLabelDirective
],
template: `
<igx-input-group>
<label igxLabel>Name</label>
<input igxInput type="text" />
</igx-input-group>
<button igxButton="contained">Submit</button>
`
})
export class FormComponent {}
Example 2: Grid with Specific Features
Importe apenas o tipo de rede que você precisa junto com as utilidades da rede principal:
import { Component } from '@angular/core';
import { IgxGridComponent } from 'igniteui-angular/grids/grid';
import { IgxGridToolbarComponent } from 'igniteui-angular/grids/core';
@Component({
selector: 'app-data-grid',
standalone: true,
imports: [IgxGridComponent, IgxGridToolbarComponent],
template: `
<igx-grid [data]="data" [autoGenerate]="true">
<igx-grid-toolbar></igx-grid-toolbar>
</igx-grid>
`
})
export class DataGridComponent {
public data = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' }
];
}
Example 3: Lazy Loading Components
Com os novos pontos de entrada, você pode facilmente carregar componentes de forma preguiçosa:
// app.routes.ts
import { Routes } from '@angular/router';
export const routes: Routes = [
{
path: 'grid',
loadComponent: () =>
import('./features/grid/grid.component')
.then(m => m.GridComponent)
},
{
path: 'tree-grid',
loadComponent: () =>
import('./features/tree-grid/tree-grid.component')
.then(m => m.TreeGridComponent)
}
];
// features/grid/grid.component.ts
import { Component } from '@angular/core';
import { IgxGridComponent } from 'igniteui-angular/grids/grid';
@Component({
selector: 'app-grid',
standalone: true,
imports: [IgxGridComponent],
template: `<igx-grid [data]="data" [autoGenerate]="true"></igx-grid>`
})
export class GridComponent {
public data = [];
}
Migration Options Summary
Você tem três opções ao atualizar para a v21.0.0:
Option 1: Migrate During Update (Recommended)
ng update igniteui-angular
Quando solicitado, escolha "Sim" para migrar importações.
Option 2: Keep Using Main Entry Point
ng update igniteui-angular
Quando solicitado, escolha "Não" para continuar usando o ponto de entrada principal. A biblioteca continua totalmente compatível com versões anteriores, mas você não se beneficiará de tamanhos ideais para pacotes.
Option 3: Migrate Later
Atualize sem migrar (escolha "Não" quando solicitado):
ng update igniteui-angular
Migre manualmente depois:
ng update igniteui-angular --migrate-only --from=20.1.0 --to=21.0.0
Best Practices
- Use pontos de entrada específicos- Importe do ponto de entrada mais específico possível (por exemplo,
igniteui-angular/grids/gridem vez de)igniteui-angular - Aproveite o carregamento preguiçoso- Combine os pontos de entrada com o carregamento preguiçoso do Angular para um desempenho ainda melhor
- Importe apenas o que você precisa- Não importe todo
coreo ponto de entrada se precisar de apenas um serviço - Check bundle analyzer - Use tools like webpack-bundle-analyzer to verify your bundle size improvements
- Atualize regularmente- Mantenha sua versão Ignite UI for Angular atualizada para aproveitar as otimizações mais recentes
Additional Resources
- Angular Formato do Pacote - Pontos de Entrada e Divisão de Código
- Ignite UI for Angular Update Guide
- Ignite UI for Angular CHANGELOG
- Ignite UI for Angular GitHub Repository
API References
Para informações detalhadas sobre componentes específicos e suas APIs, consulte a documentação de componentes: