Um barril é uma maneira de acumular exportações de vários módulos em um único módulo de conveniência. O barril em si é um arquivo de módulo que reexporta exportações selecionadas de outros módulos.
Imagine três módulos em uma pasta de heróis:
// heroes/hero.component.ts
export class HeroComponent {}
// heroes/hero.model.ts
export class Hero {}
// heroes/hero.service.ts
export class HeroService {}
Sem um barril, um consumidor precisaria de três declarações de importação:
import { HeroComponent } from '../heroes/hero.component.ts';
import { Hero } from '../heroes/hero.model.ts';
import { HeroService } from '../heroes/hero.service.ts';
Podemos adicionar um barril à pasta de heróis (chamada de índice por convenção) que exporta todos esses itens:
export * from './hero.model.ts'; // re-export all of its exports
export * from './hero.service.ts'; // re-export all of its exports
export { HeroComponent } from './hero.component.ts'; // re-export the named thing
Agora, um consumidor pode importar o que precisa do barril.
import { Hero, HeroService } from '../heroes'; // index is implied
Cada pacote com escopo Angular possui um barril chamado index.