什么是index.ts用于?

Zet*_*tki 121 angular

我一直在研究一些种子项目,所有组件似乎都有一个index.ts,它从该组件中导出*.我无法找到它实际用于的任何地方?

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

谢谢

Gün*_*uer 195

来自https://angular.io/docs/ts/latest/guide/glossary.html Barrel

桶是将多个模块的导出汇总到单个便利模块的一种方法.桶本身是一个模块文件,可以重新导出其他模块的选定导出.

想象一下英雄文件夹中的三个模块:

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

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

// heroes/hero.service.ts
export class HeroService {}
Run Code Online (Sandbox Code Playgroud)

没有桶,消费者需要三个导入语句:

import { HeroComponent } from '../heroes/hero.component.ts';
import { Hero }          from '../heroes/hero.model.ts';
import { HeroService }   from '../heroes/hero.service.ts';
Run Code Online (Sandbox Code Playgroud)

我们可以将一个桶添加到导出所有这些项的英雄文件夹(按惯例称为索引):

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
Run Code Online (Sandbox Code Playgroud)

现在消费者可以从桶中导入所需的东西.

import { Hero, HeroService } from '../heroes'; // index is implied
Run Code Online (Sandbox Code Playgroud)

Angular范围的包每个都有一个名为index的桶.

另请参见Angular 2 DI错误 - EXCEPTION:无法解析所有参数

  • 当我做'export*from'./ hero.model.ts'`时,我收到一条消息,如"'导入路径不能以'.ts''结尾"所以我只需要改为`export*from' ./ hero.model'`.另外值得重复你关于[Angular不再推荐桶]的评论(http://stackoverflow.com/questions/37997824/angular-2-di-error-exception-cant-resolve-all-parameters/38000323#comment66290733_38000323) (5认同)
  • @Qwerty我很确定这可以与摇树一起使用,但是很久以前,从建议的实践中删除了使用桶的方法,我认为在1.0之前引入模块时。 (2认同)

Aru*_*osh 25

index.tsindex.js在nodejs中类似或是index.html网站托管.

所以当你说import {} from 'directory_name'它将index.ts在指定的目录中寻找并导入那里导出的任何内容时.

例如,如果您有calculator/index.ts作为

export function add() {...}
export function multiply() {...}
Run Code Online (Sandbox Code Playgroud)

你可以做

import { add, multiply } from './calculator';
Run Code Online (Sandbox Code Playgroud)

  • @FlowerScape在创建库或模块级代码时,通过索引导出特别有用,这样最终用户可以减少冗长的导入.它还隐藏了导入代码的任何不必要/混乱的实现细节. (2认同)

RAK*_*KAR 9

index.ts帮助我们将所有相关的东西放在一起,我们不需要担心源文件名。

我们可以使用源文件夹名称导入所有内容。

import { getName, getAnyThing } from './util';
Run Code Online (Sandbox Code Playgroud)

这里 util 是文件夹名称而不是文件名,其中index.ts重新导出所有四个文件。

export * from './util1';
export * from './util2';
export * from './util3';
export * from './util4';
Run Code Online (Sandbox Code Playgroud)