angular项目为什么使用index文件重新导出组件和模块?
1. 前言
许多angular项目每个文件夹中都会有一个index.ts文件用来导出文件夹下其他文件的内容(其实其他每个文件内都有导出语句)。为什么重新导出所有文件呢?不会很麻烦吗?
2. barrel 官方解释
其实这种做法是angular 2
时写入Angular style guide
的官方代码风格,被称为barrel
,现在已经从官方规范中移出。
In the Angular 2 docs, a barrel is defined as: “A barrel is a way to rollup exports from several modules into a single convenience module. The barrel itself is a module file that re-exports selected exports of other modules.”
3. 代码解释
假如heroes
文件夹下有三个 modules
:
1 | // heroes/hero.component.ts |
不使用barrel导出,调用方若要使用以上三个模块需:
1 | import { HeroComponent } from '../heroes/hero.component.ts'; |
使用barrel,在heros
文件夹下增加 index.ts
文件,导出其他所有文件内容:
1 | export * from './hero.model.ts'; // re-export all of its exports |
调用方可从barrel中引入所有模块:
1 | import { Hero, HeroService } from '../heroes'; // index is implied |
4. barrel 优点
- 解决
import
语句冗长,笨重的问题。 - 调整文件夹结构时,减少引用路径错乱的问题。