2016-06-01 3 views
80

Я изучал несколько проектов семян, и все компоненты, как представляется, имеют index.ts, которые экспортируют * из этого компонента. Я не могу найти нигде, на что он фактически используется?Для чего предназначены все index.ts?

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

например

Благодаря

+0

, имеющих отношение к этой дискуссии [этот вопрос] (https://github.com/angular/angular.io/issues/1301) на github. Вы можете прочитать его, прежде чем использовать файлы стволов с вашим проектом Angular – BeetleJuice

ответ

127

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

Баррель способ Rollup экспорта из нескольких модулей в единый модуль удобства. Сам ствол является файлом модуля, который реэкспортирует выбранный экспорт других модулей.

Представьте себе три модуля в папке героев:

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

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

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

без ствола, потребитель будет нуждаться в трех операторов импорта:

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

Мы можем добавить ствол в папку героев (так называемый индекс по соглашению) , которая экспортирует все эти пункты:

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 

Теперь потребитель может импортировать то, что ему нужно из ствола.

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

Пакеты с угловыми областями имеют указатель с названием ствола.

Смотрите также Angular 2 DI Error - EXCEPTION: Can't resolve all parameters

+3

Когда я делаю эквивалент 'export * from './ hero.model.ts'', я получаю сообщение типа« путь импорта не может закончиться '.ts' '"Поэтому я просто перехожу к' export * from'./hero.model''. Также стоит повторить ваш комментарий о [Угловой, не рекомендующий бочки больше] (http://stackoverflow.com/questions/37997824/angular-2-di-error-exception-cant-resolve-all-parameters/38000323#comment66290733_38000323) –

+0

@ TheRedPea благодарит за подсказку. Я не хочу менять его, потому что это цитата из (более ранней версии) связанной страницы. –

+0

Знаете ли вы, есть ли какая-либо вспомогательная библиотека или команда для генерации index.js автоматически? – tom10271

11

index.ts похож index.js в nodejs или index.html является веб-сайт хостинг.

Итак, когда вы скажете import {} from 'directory_name', он будет искать index.ts внутри указанного каталога и импортировать туда все, что там экспортируется.

Например, если у вас есть calculator/index.ts в

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

Вы можете сделать

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

мой опыт работы с компиляцией AOT заключается в том, что он приводит к циклическим ссылкам. Должны ли мы даже беспокоиться об экспорте через индекс? Кажется, он просто создает больше обслуживания. Кроме того, с современными js IDE, все это дерьмо - импорт, поэтому зачем создавать и поддерживать индексные файлы? – FlavorScape

+1

@FlowerScape Экспорт через индекс особенно полезен при создании libra ries или код уровня модуля, так что конечные пользователи имеют менее подробный импорт. Он также скрывает любые ненужные/запутывающие детали реализации импортированного кода. –

Смежные вопросы