Explain like I’m five: package managers
Tags: beginners, javascript, webdev, tooling
Published: 2022-10-09 17:01:44

For a long time, the subject of package managers was for me an intimidating one. As a bootcamp grad, I knew enough to build a website or set up a database but any configuration issues stressed me out. Every now and then, I'll encounter a discussion on which package manager is the superior one and I'd immediately feel humbled by all the things I still don't know about web dev.

Now that at StackBlitz we are about to make a big announcement regarding package managers, I thought I'd revisit this topic and take an “Explain like I’m five” route 💕 

Let’s look into what a Node module, a package, and a package manager are.

## Metaphor: LEGO sets

I have recently visited a friend who loves LEGO. His whole house looks like an exhibition hall with colorful sets displayed in the most surprising places. There’s a flower standing on a bathroom mirror shelf, a dragon guarding the stairs, a TV series set near the kitchen table, and a wizardry school near his TV stand. I’ve noticed that in most cases one big creation was, in fact, a collection of smaller sets.

Imagine that the massive wizardry school castle is your app and for it to be complete, you need to add a bunch of extras like a train station, a magic tree, or a phoenix. Each of them is a separate entity that you can move around as you wish. 

## Node modules and packages

If the wizardry school castle is your app, then each of the extras would be a Node module or a package.

So your castle needs a magic tree. You could design it yourself but it is way easier get the whole set designed and packaged together in a box with an instruction. A ready-made set in this analogy is a “package” and the instruction is the “`package.json`” file. 

**A Node module, or a package, is a piece of code that helps you add some functionality to your app. The `package.json` file tells us who created the package, when it was created, what other “dependencies” it needs to function, and so on.**

To satisfy the folks who like to be very precise, please note that the [npm docs page](https://docs.npmjs.com/about-packages-and-modules) makes a distinction between "Node modules" and "packages. However, in most cases “Node module” and “package” are used interchangeably.

## Package managers

Now, if you only have one or two LEGO sets in your home, managing an inventory of all the blocks, sets, and figurines you have would not be that difficult. But what if you are a lifelong collector, pieces break often, there are new sets constantly coming out, and the available color scheme changes faster than the company manages to announce it? Well, ideally you would find a system to keep track of all the pieces you own, need to replace, no longer need, and that that you need to buy?

This is why in software there is a need for the so-called “package managers”. **A package manager is a tool that helps you keep track of all dependencies of your app in a consistent way.** It automates the tasks of dependency installation, upgrading, configuration, and removal. It makes sure that all the packages that your app needs are installed, in the correct version, or up-to-date.

**tl;dr package managers automate all the tasks regarding dependencies, saving your precious time 💕**

---

We will share big news regarding package managers at the upcoming [ViteConf](viteconf.org). Grab your free ticket and tune in this week (Oct 12-13) if you're curious 👀