Tüm index.ts ne için kullanılıyor?


Yanıtlar:


228

Gönderen Angular.io V2 'nin arşivlenmiş sözlüğü için girişi Barrel* :

Varil, birkaç modülden dışa aktarımı tek bir kullanışlı modülde toplamanın bir yoludur. Varilin kendisi, diğer modüllerin seçilen dışa aktarımlarını yeniden dışa aktaran bir modül dosyasıdır.

Bir kahramanlar klasöründe üç modül hayal edin:

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

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

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

Bir varil olmadan, bir tüketicinin üç ithalat beyanına ihtiyacı olacaktır:

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

Kahramanlar klasörüne (geleneksel olarak dizin adı verilir) bu öğelerin tümünü dışa aktaran bir varil ekleyebiliriz:

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

Artık bir tüketici, ihtiyaç duyduğu şeyi varilden ithal edebilir.

import { Hero, HeroService } from '../heroes'; // index is implied

Açısal kapsamlı paketlerin her birinin varil adında bir indeksi vardır.

Ayrıca bkz. İSTİSNA: Tüm parametreleri çözemiyor


* NOT: Angular sözlüğünün daha yeni sürümlerindenBarrel kaldırılmıştır .

GÜNCELLEME Angular'ın son sürümlerinde, varil dosyası aşağıdaki gibi düzenlenmelidir,

export { HeroModel } from './hero.model';  
export { HeroService } from './hero.service'; 
export { HeroComponent } from './hero.component';

5
Eşdeğeri export * from './hero.model.ts'yaptığımda, "'bir içe aktarma yolu' .ts 'ile bitemez' 'gibi bir mesaj alıyorum, bu yüzden sadece olarak değiştiriyorum export * from './hero.model'. Ayrıca Angular'ın artık varil önermediği
The Red Pea

1
@TheRedPea ipucu için teşekkürler. Değiştirmek istemiyorum çünkü bağlantılı sayfadan (önceki bir sürümünden)
alıntı

Index.js'yi otomatik olarak oluşturmak için herhangi bir yardımcı kitaplık veya komut var mı biliyor musunuz?
tom10271

1
@AlexanderAbakumov Bir bileşen, yönerge veya boru bir ve yalnızca bir modüle ait olması gerektiğinden, yukarıdakilerden herhangi birini bir modülde beyan ettiğinizde, o modülü içe aktardığınızda aslında aynı şeyi elde edersiniz ... modül.
rism

2
@Qwerty Bunun ağaç sallamayla çalıştığından oldukça eminim, ancak varil kullanmak uzun zaman önce önerilen uygulamalardan kaldırıldı, sanırım modüller 1.0'dan hemen önce tanıtıldığında.
Günter Zöchbauer

29

index.tsindex.jsnodejs'de benzer veya index.htmlweb sitesi barındırmadır.

Yani söylediğinizde , belirtilen dizinin içini import {} from 'directory_name'arayacak index.tsve orada verilen her şeyi içe aktaracaktır .

Örneğin calculator/index.ts,

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

Yapabilirsin

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

3
@FlowerScape İndeks yoluyla dışa aktarma, özellikle kitaplıklar veya modül düzeyinde kod oluştururken yararlıdır, böylece son kullanıcılar daha az ayrıntılı içe aktarma yapar. Ayrıca, içe aktarılan kodun gereksiz / kafa karıştırıcı uygulama ayrıntılarını da gizler.
Quinn Turner

Üstlenmeden. Kodu değiştirebilirsiniz, örn. index.ts'deki dışa aktarmaları aynı tuttuğunuz sürece dosyaları yeniden adlandırın.
user77115

3

index.ts tüm ilgili şeyleri bir arada tutmamıza yardımcı olur ve kaynak dosya adı konusunda endişelenmemize gerek yoktur.

Her şeyi kaynak klasör adını kullanarak içe aktarabiliriz.

import { getName, getAnyThing } from './util';

Burada kullanım, index.tsdört dosyanın tümünü yeniden dışa aktaran dosya adı değil, klasör adıdır .

export * from './util1';
export * from './util2';
export * from './util3';
export * from './util4';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.