When working with Node.js projects that use NPM to manage dependencies, you’ll see a folder called node_modules
appear.
At first glance, it might seem like a jumble of folders and files without meaning. But, in reality, the node_modules folder is an essential component of the Node.js ecosystem.
In the node_modules
folder, NPM stores all the dependencies of your project. When you write code that requires external packages, NPM looks for and uses the appropriate versions of those packages stored in this folder.
Every time you run the npm install
command to install a package, NPM downloads the package and all its required dependencies from the NPM package registry and places them in this folder.
The structure of the node_modules
folder can become very extensive and vary depending on the number of dependencies and their own dependencies. But fortunately, it’s not a folder you have to touch manually. NPM will do the work for you.
Structure of the node_modules folder
Each dependency is installed inside node_modules
in its own folder, with the package name. Each subfolder may contain files and folders corresponding to the modules that the dependency needs to function.
Let’s look at a (very) simplified example of the structure that the node_modules
folder could have for a project with two dependencies: “express” and “lodash”.
node_modules/
├── express/
│ ├── index.js
│ ├── lib/
│ │ ├── application.js
│ │ ├── request.js
│ │ └── response.js
│ ├── node_modules/
│ │ ├── mime/
│ │ │ ├── index.js
│ │ │ └── LICENSE
│ │ ├── accepts/
│ │ │ └── index.js
│ │ └── ...
│ └── ...
└── lodash/
├── index.js
├── chain.js
└── ...
So, in this example, we have the node_modules
folder with two subfolders: express
and lodash
. In turn, each of these subfolders contains the files and folders necessary for the dependencies to work correctly.
It’s important that you do not manually modify the files inside the node_modules
folder, as NPM takes care of managing dependencies and their versions automatically.
If you need to make changes or customizations to a dependency, you can do so from your own project instead of directly modifying the node_modules
folder.
Optimizing the node_modules folder
The node_modules folder can grow rapidly and contain thousands of files; its size can become a problem if not handled properly. Here are some strategies to optimize the use of node_modules:
Well-defined package.json file. Specify dependencies accurately and use semantic versioning to avoid conflicts between them, and do not use libraries if you are not going to actively use them.
Do not include node_modules in source control. In projects versioned with Git or other version control systems, it’s good practice to avoid including the node_modules folder in the repository. Add the folder to the .gitignore file so that developers can install the dependencies themselves when cloning the project.