Exploit Npm local modules
Posted on July 16, 2018 in
3 min read
I've just started a personal project, you know, the so-called side project, that involves a consistent amount of Node.js code.
For that reason, I've taken the time to investigate a bit on a neat feature of Npm, the most popular package manager for Node.js ecosystem, to handle local modules as they were regular Npm remote and published modules.
Building a project with a mindset that foster modularity is both a great way to understand the project complexity as well as to fix and refactor it along the way without rewriting everything from scratch over and over.
Npm is a platform (that comes pre-installed with Node.js) that allows publishing Node.js modules in order to let other people use them, in full open-source spirit. Any developer can then download specific modules with a simple shell command. It allows also to use local modules in a local project, exploiting the good of the modular pattern without publishing them in the public registry.
In order to install a remote module we use this command:
npm install a_remote_module --save
Npm query the registry in order to get the download url, this way a local copy of the module can be put within the project folder (usually in a node_modules
folder).
We can do the same with local modules as well:
npm install file:local_modules/mod1 --save
where mod1
is a regular Node module and local_modules
is a folder within the project root folder.
In case you need to install a local module from another module/project outside the project root, you need to provide the full or relative path towards it.
In this tutorial I'm going to outline the step-by-step to learn how to write and use local modules in a Node.js based project.
Setting up a Node project with NPM
This is the first step that requires a project folder and an init
command such as:
npm init
Npm will ask for some information in order to compile a basic package.json
file properly.
Then, let's create a local_modules
subfolder where we're going to put our local modules.
Each local module needs to be a folder within local_modules
with a proper package.json
file. Every time you need a new module, just create it with npm init
.
Each local module can have its own external node_modules
as well:
You can compose a local module using other local modules:
And finally you can use local modules in your project in the same way you'd do with the published one:
Thinking of a project as a collection of independent modules bring a huge benefit in terms of resiliency and maintainability. This is especially useful for long-term projects.
You can check-out the complete files from this repository.