We help companies like yours with expert Next.js performance advice and auditing.

Performance Optimization
25/04/2025 03:54

Next.js Bundle Size Improvements: Optimize Your Performance

How removing barrel files and using modularized imports can drastically improve performance

media

Understanding Barrel Files: Convenience at a Cost

Barrel files simplify imports by consolidating multiple module exports into a single index file. A common example looks like this:

// utils/index.js
export { default as module1 } from './module1';
export { default as module2 } from './module2';
export { default as module3 } from './module3';

This enables shorter and cleaner import statements:

import { module1, module2, module3 } from './utils';

While barrel files enhance readability, they can significantly increase your bundle size. Bundlers often import the entire barrel file, including unused modules, preventing effective tree shaking.

The Tree Shaking Challenge

Tree shaking reduces JavaScript bundle sizes by removing unused code. However, barrel files obscure direct import-module relationships, causing unnecessary code retention and inflated bundles, negatively impacting your app’s performance.

How to Optimize Your Bundle Size

Identify barrel files

Identifying barrel files is essential but can be challenging, often requiring manual effort. Inspect your bundle visually for unusually large files or systematically review your index.js and index.ts files.

Remove barrel files

Removing barrel files is essential for Next.js versions below 13.1 or for barrel files in your own codebase. For instance, one of our clients reduced their bundle size by 400 KB simply by removing a barrel file exporting multiple SVGs, originally adding 477 KB.

For TypeScript projects, maintain convenience using tsconfig.json paths:

// tsconfig.json
"baseUrl": ".",
  "paths": {
   "@/utils/*": ["./utils/*"],
  }
 },

Results in clear imports:

import { module1, module2, module3 } from '@/utils';

Modularize Imports (Next.js 13.1 - 13.5)

Modularized imports rewrite import statements to enable tree shaking:

// Before (with barrel file)
import { Button, Slider, Dropdown } from '@acme/ui';
// After (with modularized imports from plugin)
import Button from '@acme/ui/dist/Button';
import Slider from '@acme/ui/dist/Slider';
import Dropdown from '@acme/ui/dist/Dropdown';

Configure modularized imports in your next.config.js:

// next.config.js
module.exports = {
 modularizeImports: {
  '@acme/ui': {
   transform: '@acme/ui/dist/{{member}}',
  },
 },
};

This approach clearly maps imports, bypassing barrel files, but has limitations: extensive manual configuration can be cumbersome for large-scale applications or projects with many dependencies, and it only supports third-party libraries.

Optimize Package Imports (Next.js 13.5+)

From Next.js 13.5 onwards, automatic import optimization is available:

// next.config.js
module.exports = {
 experimental: {
  // Include external libraries and your own barrel files
  optimizePackageImports: ["my-lib", "@/utils"]
 }
}

When enabled, Next.js analyzes entry barrel files and automatically maps all imports, similar to modularize imports. This process is faster than full tree-shaking as it scans barrel files in one pass, recursively handling nested barrel files and wildcard exports (export * from).

Next.js automatically includes some libraries by default; see Next.js default optimization list.

You can conveniently include your own barrel files, removing the need to eliminate them manually.

Optimizing your bundle size improves performance, enhances user experience, and boosts ad revenue. Follow these strategies in your Next.js projects to keep your apps fast and user-friendly.

Catch Metrics is the leading solution to help solve ad stack performance problems.Get in touchto learn more from our experts

Get Started Today

Sign up for a demo or contact our team to learn more about how Catch Metrics can help you achieve your goals. As part of all demos we offer a free Ad Speed Audit and ROI modelling exercise to help you understand how your Ad speed is impacting your revenues.