2016-06-01 12 views
80

Ho esaminato alcuni progetti di seed e tutti i componenti sembrano avere un index.ts che esporta * da quel componente. Non riesco a trovare da nessuna parte a cosa sia effettivamente usato?Per cosa sono utilizzati index.ts?

es https://github.com/mgechev/angular2-seed/tree/master/src/client/app/%2Bhome

Grazie

+0

Rilevante per questa discussione è [questo problema] (https://github.com/angular/angular.io/issues/1301) su github. Potresti leggerlo prima di usare i file di botte con il tuo progetto Angular – BeetleJuice

risposta

127

partire https://angular.io/docs/ts/latest/guide/glossary.htmlBarrel

Un barile è un modo per rollup esportazioni da diversi moduli in un unico modulo convenienza. La canna stessa è un file di modulo che riesporta le esportazioni selezionate di altri moduli da .

Immaginate tre moduli in una cartella eroi:

// heroes/hero.component.ts 
export class HeroComponent {} 

// heroes/hero.model.ts 
export class Hero {} 

// heroes/hero.service.ts 
export class HeroService {} 

Senza un barile, un consumatore avrebbe bisogno di tre istruzioni di importazione:

import { HeroComponent } from '../heroes/hero.component.ts'; 
import { Hero }   from '../heroes/hero.model.ts'; 
import { HeroService } from '../heroes/hero.service.ts'; 

Possiamo aggiungere un barile alla cartella eroi (chiamato index per convenzione) che esporta tutti questi articoli:

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 

Ora un consumatore può importare ciò di cui ha bisogno dal barile.

I pacchetti con ambito angolare hanno ciascuno un indice denominato barile.

Vedi anche Angular 2 DI Error - EXCEPTION: Can't resolve all parameters

+3

Quando faccio l'equivalente di "export * from"./Hero.model.ts'', ricevo un messaggio del tipo "'un percorso di importazione non può terminare con un '.ts' '"Quindi passo a' export * da'./hero.model''. Vale anche la pena ripetere il tuo commento su [Angular not recommending barrels più] (http://stackoverflow.com/questions/37997824/angular-2-di-error-exception-cant-resolve-all-parameters/38000323#comment66290733_38000323) –

+0

@ TheRedPea ringrazia per il suggerimento. Non voglio cambiarlo perché è una citazione da (una versione precedente della) pagina collegata –

+0

Sai che esiste una libreria o un comando di supporto per generare index.js automaticamente? – tom10271

11

index.ts è simile index.js in nodejs o index.html è il sito web hosting.

Quindi quando si dice import {} from 'directory_name' cercherà index.ts all'interno della directory specificata e importa qualsiasi cosa viene esportato lì.

Per esempio, se si dispone di calculator/index.ts come

export function add() {...} 
export function multiply() {...} 

Si può fare

import { add, multiply } from './calculator'; 
+1

la mia esperienza con la compilazione AOT è che porta a riferimenti circolari: dovremmo persino preoccuparci di esportare tramite l'indice? Sembra che crei più manutenzione, inoltre, con i moderni je IDE, tutta quella merda è auto-importata, quindi perché preoccuparsi di creare e mantenere file di indice? – FlavorScape

Problemi correlati