← All posts

External Libraries in Vite Projects

Introduction

While working with Vite, adding external libraries felt like the easiest way to speed up development. Instead of building everything from scratch, I could just install a package and move on.

However, over time, I started noticing that these “quick additions” come with trade-offs. This blog captures what I learned about using external libraries in a Vite project.


Why external libraries feel great initially

Libraries help to:

  • Save development time
  • Avoid reinventing common features
  • Use well-tested implementations

In a fast-paced project, this is extremely useful.

For example:

  • UI libraries reduce styling effort
  • Utility libraries simplify logic
  • Axios replaces manual fetch handling

At this stage, everything feels efficient.


The cost: bundle size

Each library adds code to the final build.

Even if only a small part of the library is used:

  • The entire module may still be included
  • This increases bundle size
  • Larger bundles => slower load times

This is where tree-shaking is supposed to help, but it is not always perfect.


Tree-shaking: what-i-expected VS what-happened

Tree-shaking removes unused code during bundling.

In theory:

  • Import only what you use
  • Unused parts are excluded

In practice:

  • Some libraries are not optimized for tree-shaking
  • Incorrect imports can pull in entire modules
  • Default imports are often heavier than named imports

This means performance depends not just on what you use, but how you import it.


Dev VS Prod behavior

Vite is fast during development because:

  • It uses native ES modules
  • It avoids heavy bundling in dev mode

But during production:

  • Everything is bundled
  • Library size becomes visible
  • Performance impact becomes real

So something that feels fast in development may not be efficient in production.


When libraries become a problem

Overusing libraries can lead to:

  • Increased bundle size
  • Dependency conflicts
  • Harder debugging
  • Reduced control over logic

In some cases, writing a small custom function is simpler than importing a full library.


What I learned

  • Libraries are useful, but not always necessary
  • Import style matters (named vs default)
  • Production performance should be considered early
  • Small, focused libraries are often better than large ones

Conclusion

External libraries are powerful tools, but they should be used with awareness. In a Vite project, they improve development speed but can silently impact performance if not handled carefully.

Balancing convenience and efficiency is key when choosing dependencies.