11

If I run this:

ng g component components/blogs

I get

app
+--components
| +--blogs
| |  +--shared
| |  |  +--index.ts              // what's this for?
| |  +--blogs.component.css
| |  +--blogs.component.html
| |  +--blogs.component.ts
| |  +--blogs.component.spec.ts  // unit tests!
| |  +--index.ts

I understand the rest, but what is the /blogs/shared/index.ts for? Why does a component have a shared folder if that component folder is just for the component?

jmbmage
  • 2,487
  • 3
  • 27
  • 44

1 Answers1

19

The idea of the index.ts file in the shared dir is something called a barrel.

The goal of the barrel it to consolidate imports. It will export the items contained within shared to make the imports in blogs.component.ts cleaner...

app/components/blogs/shared/blogs.service.ts

export class BlogsService { ... }

app/components/blogs/shared/blog.model.ts

export class Blog { ... }

app/components/blogs/shared/index.ts

export * from './blogs.service';
export * from './blog.model';

app/components/blogs/blogs.component.ts

// without barrel
import { BlogsSerivce } from './shared/blogs.service';
import { Blog } from './shared/blog.model';

// with barrel
import { BlogService, Blog } from './shared';

And if you can imagine this becomes much more consolidated as you add more components/services/directives/models.

REFERENCE You can read about barrels in the official style guide (Thanks to Günter Zöchbauer)

v.karbovnichy
  • 3,183
  • 2
  • 36
  • 47
Brocco
  • 62,737
  • 12
  • 70
  • 76