Frontend Patterns

Pattern

Barrel Export

Aggregate multiple exports into a single entry point using index files to create clean public APIs and simplify import paths.

Barrel Export

Problem

Import statements are verbose and expose internal file structure: import { Button } from './components/atoms/buttons/Button/Button.tsx'. Consumers need to know the exact file location and structure, making imports brittle and refactoring difficult. Moving a file requires updating imports throughout the codebase.

Solution

Create index files that re-export multiple modules from a directory, allowing consumers to import from the directory rather than specific files. This hides internal structure and lets you reorganize files without breaking external imports.

Example

This example demonstrates creating a barrel file that aggregates component exports into a single entry point, simplifying imports for consumers.

// components/index.js - Barrel file that re-exports all components
export { Button } from './Button';  // Re-export Button component
export { Input } from './Input';    // Re-export Input component
export { Card } from './Card';      // Re-export Card component

// Usage: Import multiple components from the barrel file
import { Button, Input, Card } from './components';

Benefits

  • Simplifies imports with shorter, cleaner paths from directory entry points.
  • Hides internal file structure from consumers, making refactoring easier.
  • Creates a clear public API by explicitly defining what’s exported.
  • Reduces import statement verbosity across the codebase.
  • Allows reorganization of internal files without breaking external code.

Tradeoffs

  • Can hurt tree-shaking in some bundlers by creating additional indirection.
  • Increases bundle size if barrel files export everything indiscriminately.
  • Makes it harder to trace where a specific export is actually defined.
  • Requires maintaining additional index files alongside component files.
  • May cause circular dependency issues if not structured carefully.
Stay Updated

Get New Patterns
in Your Inbox

Join thousands of developers receiving weekly insights on frontend architecture patterns

No spam. Unsubscribe anytime.