Skip barrel imports

On Next.js, use optimizePackageImports; elsewhere, import file paths.

Vercelvercel.com/blog
Reference: How we optimized package imports in Next.js
BlogRead article ↗

From vercel-react-best-practices, rule bundle-barrel-imports.

One icon, 1,583 modules

Type the lucide icons you use, comma separated.

Barrel importBad
Modules
1,583
Size
~1 MB
Dev
+2.8 s
Direct importsGood
Modules
3
Size
~2 KB
Dev
0 s

Cold-start the dev server

Press Start, tick optimizePackageImports, start again.

Barrel importBad
0.0 simport cost
    Direct importsGood
    0.0 simport cost

      // next.config.js
      module.exports = {
        experimental: {
          optimizePackageImports: ['lucide-react', '@mui/material'],
        },
      }

      Why it matters, pros and cons

      Why it matters

      One import from a barrel loads every module it re-exports.

      Pros

      • 15–70% faster dev boot
      • ~2 KB instead of ~1 MB
      • The Next.js flag keeps imports and types

      Cons

      • Deep paths are internals; a major can move them
      • Small in-house barrels cost little
      • lucide deep paths ship no types: implicit any