index.ts全部用作什么?


Answers:


227

来自Angular.io v2的Barrel* 存档词汇表条目:

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

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

// 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';

我们可以将桶添加到heroes文件夹(按惯例称为索引)中,以导出所有这些项目:

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作用域包都有一个名为index的桶。

另请参见例外:无法解析所有参数


* 注意: Barrel已从Angular词汇表的最新版本中删除。

更新 对于最新版本的Angular,桶形文件应如下进行编辑,

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

5
当执行等效操作时export * from './hero.model.ts',会收到类似“导入路径不能以'.ts结尾”的消息,因此我将其更改为export * from './hero.model'。同样值得重复您对Angular不推荐使用桶的
The Red Pea

1
@TheRedPea感谢您的提示。我不想改变它,因为它是从链接页面(更早的版本)报价
君特Zöchbauer

您知道有任何帮助程序库或命令来自动生成index.js吗?
tom10271 '17

1
@AlexanderAbakumov由于组件,指令或管道必须属于一个且仅属于一个模块,因此通过在模块中声明以上任何内容,在导入该模块时,您基本上可以实现相同的目的...假设您还从中导出了它们模块。
rism

2
@Qwerty我很确定这可以与摇树一起使用,但是很久以前,从建议的实践中删除了使用桶的方式,我认为在1.0之前引入模块时。
君特Zöchbauer

29

index.tsindex.js在nodejs中是类似的还是index.html在网站托管中。

因此,当您说它import {} from 'directory_name'index.ts在指定目录中查找并导入在那里导出的所有内容时。

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

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

你可以做

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

3
@FlowerScape通过索引导出在创建库或模块级代码时特别有用,这样最终用户的导入就更少了。它还隐藏了导入代码的任何不必要/令人困惑的实现细节。
奎因·特纳

重构。您可以更改代码,例如。重命名文件,只要您保持index.ts中的导出相同即可。
user77115

3

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

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

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

此处util是文件夹名,而不是文件名,index.ts该文件名具有重新导出所有四个文件的功能。

export * from './util1';
export * from './util2';
export * from './util3';
export * from './util4';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.