How can I make multiple projects share node_modules directory?

You absolutely can share a node_modules directory amongst projects.

From node’s documentation:

If the module identifier passed to require() is not a native module,
and does not begin with “https://stackoverflow.com/”, ‘../’, or ‘./’, then node starts at the
parent directory of the current module, and adds /node_modules, and
attempts to load the module from that location.

If it is not found there, then it moves to the parent directory, and
so on, until the root of the file system is reached.

For example, if the file at ‘/home/ry/projects/foo.js’ called
require(‘bar.js’), then node would look in the following locations, in
this order:

/home/ry/projects/node_modules/bar.js /home/ry/node_modules/bar.js
/home/node_modules/bar.js /node_modules/bar.js

So just put a node_modules folder inside your projects directory and put in whatever modules you want. Just require them like normal. When node doesn’t find a node_modules directory in your project folder, it will check the parent folder automatically. So make your directory structure like this:

-myProjects
--node_modules
--myproject1
---sub-project
--myproject2

So like this, even your sub-project’s dependencies can draw on your main node_modules repository.

One drawback to doing it this way is you will have to build out your package.json file manually (unless someone knows a way to automate this with grunt or something). When you install your packages and add the –save arg to an npm install command it automatically appends it to the dependencies section or your package.json, which is convenient.

Leave a Comment