Node.js NPM Tutorial: How to Create, Extend, Publish modules

Node.js Modules

A module in Node.js is a logical encapsulation of code in a single unit. It’s always a good programming practice to always segregate code in such a way that makes it more manageable and maintainable for future purposes. That’s where modules in Node.js comes in action.

Since each module is an independent entity with its own encapsulated functionality, it can be managed as a separate unit of work.

What is a Module in Node.js?

As stated earlier, modules in Node js are a way of encapsulating code in a separate logical unit. There are many readymade modules available in the market which can be used within Node js.

Below are some of the popular modules which are used in a Node js application

  1. Express framework – Express is a minimal and flexible Node js web application framework that provides a robust set of features for the web and mobile applications.
  2. Socket.io – Socket.IO enables real-time bidirectional event-based communication. This module is good for creation of chatting based applications.
  3. Jade – Jade is a high-performance template engine and implemented with JavaScript for node and browsers.
  4. MongoDB – The MongoDB Node.js driver is the officially supported node.js driver for MongoDB.
  5. Restify – restify is a lightweight framework, similar to express for building REST APIs
  6. Bluebird – Bluebird is a fully-featured promise library with a focus on innovative features and performance

Using modules in Node.js

In order to use modules in a Node.js application, they first need to be installed using the Node package manager.

The below command line shows how a module “express” can be installed.

npm install express

Using Modules in Node.js

  • The above command will download the necessary files which contain the “express modules” and take care of the installation as well
  • Once the module has been installed, in order to use a module in a Node.js application, you need to use the ‘require’ keyword. This keyword is a way that Node.js uses to incorporate the functionality of a module in an application.

Let’s look at an example of how we can use the “require” keyword. The below “Guru99” code example shows how to use the require function

Using Modules in Node.js

var express=require('express');
var app=express();
app.set('view engine','jade');
app.get('/',function(req,res)
{
});
var server=app.listen(3000,function()
{
});
  1. In the first statement itself, we are using the “require” keyword to include the express module. The “express” module is an optimized JavaScript library for Node.js development. This is one of the most commonly used Node.js modules.
  2. After the module is included, in order to use the functionality within the module, an object needs to be created. Here an object of the express module is created.
  3. Once the module is included using the “require” command and an “object” is created, the required methods of the express module can be invoked. Here we are using the set command to set the view engine, which is used to set the templating engine used in Node.js.
  4. Note:-(Just for the reader’s understanding; a templating engine is an approach for injecting values in an application by picking up data from data files. This concept is pretty famous in Angular JS wherein the curly braces {{ key }} is used to substitutes values in the web page. The word ‘key’ in the curly braces basically denotes the variable which will be substituted by a value when the page is displayed.)

  5. Here we are using the listen to method to make the application listen on a particular port number.

How to Create NPM modules

Node.js has the ability to create custom modules and allows you to include those custom modules in your Node.js application.

Let’s look at a simple example of how we can create our own module and include that module in our main application file. Our module will just do a simple task of adding two numbers.

Let’s follow the below steps to see how we can create modules and include them in our application.

Following is Step by Step Process on How to Create NPM modules

Step 1) Create a file and Paste below code
Create a file called “Addition.js” and include the below code. This file will contain the logic for your module.

Below is the code which would go into this file;

Creating NPM Modules

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};
  1. The “exports” keyword is used to ensure that the functionality defined in this file can actually be accessed by other files.
  2. We are then defining a function called ‘AddNumber’. This function is defined to take 2 parameters, a and b. The function is added to the module “exports” to make the function as a public function that can be accessed by other application modules.
  3. We are finally making our function return the added value of the parameters.

Now that we have created our custom module which has the functionality of adding 2 numbers. It’s now time to create an application, which will call this module.

In the next step, we will actually see how to create the application which will call our custom module.

Step 2) Create an application file
Create a file called “app.js,” which is your main application file and add the below code

Creating NPM Modules

var Addition=require('./Addition.js');
console.log(Addition.AddNumber(1,2));
  1. We are using the “require” keyword to include the functionality in the Addition.js file.
  2. Since the functions in the Addition.js file are now accessible, we can now make a call to the AddNumber function. In the function, we are passing 2 numbers as parameters. We are then displaying the value in the console.

Creating NPM Modules

Output:

  • When you run the app.js file, you will get an output of value 3 in the console log.
  • The result is because the AddNumber function in the Addition.js file was called successfully, and the returned value of 3 was displayed in the console.

Note: – We are not using the “Node package manager” as of yet to install our Addition.js module. This is because the module is already part of our project on the local machine. The Node package manager comes in the picture when you publish a module on the internet, which we see in the subsequent topic.

Extending modules in Node.js

When creating modules, it is also possible to extend or inherit one module from another.

In modern-day programming, it’s quite common to build a library of common modules and then extend the functionality of these common modules if required.

Let’s look at an example of how we can extend modules in Node.js.

Step 1) Create the base module.

In our example, create a file called “Tutorial.js” and place the below code.

In this code, we are just creating a function which returns a string to the console. The string returned is “Guru99 Tutorial”.

Extending Modules in Node.js

var exports=module.exports={};
exports.tutorial=function()
{
console.log("Guru99 Tutorial")
}
  1. The exports module is used so that whatever function is defined in this file can be available in other modules in Node.js
  2. We are creating a function called tutorial which can be used in other Node.js modules.
  3. We are displaying a string “Guru99 Tutorial” in the console when this function is called.

Now that we have created our base module called Tutorial.js. It’s now time to create another module which will extend this base module.

We will explore how to do this in the next step.

Step 2) Next, we will create our extended module. Create a new file called “NodeTutorial.js” and place the below code in the file.

Extending Modules in Node.js

var Tutor=require('./Tutorial.js');
exports.NodeTutorial=function()
{
console.log("Node Tutorial")
function pTutor()
{
var PTutor=Tutor
PTutor.tutorial();
}
}

Or
var Tutor=require('./Tutorial.js');
exports.NodeTutorial=function()
{
console.log("Node Tutorial")
this.pTutor = function ()
{
var PTutor=Tutor
PTutor.tutorial();
}
}

Note, the following key points about the above code

  1. We are using the “require” function in the new module file itself. Since we are going to extend the existing module file “Tutorial.js”, we need to first include it before extending it.
  2. We then create a function called “Nodetutorial.” This function will do 2 things,
  • It will send a string “Node Tutorial” to the console.
  • It will send the string “Guru99 Tutorial” from the base module “Tutorial.js” to our extended module “NodeTutorial.js”.
  1. Here we are carrying out the first step to send a string to “Node Tutorial” to the console.
  2. The next step is to call the function from our Tutorial module, which will output the string “Guru99 Tutorial” to the console.log.

Step 3) Create your main app.js file, which is your main application file and include the below code.

Extending Modules in Node.js

var localTutor=require('./NodeTutorial.js');
localTutor.NodeTutorial();
localTutor.NodeTutorial.pTutor();

Or use this code
var tut = new localTutor.NodeTutorial();  // Create and save object
tut.pTutor();  // Call function on object

The above code does the following things;

  1. Our main application file now calls the “NodeTutorial” module.
  2. We are calling the “NodeTutorial” function. By calling this function, the text “Node Tutorial” will be displayed in the console log.
  3. Since we have extended our Tutorial.js module and exposed a function called pTutor. It also calls the tutorial module in the Tutorial.js module, and the text “Guru99 Tutorial” will be displayed to the console as well.

Output:

Since we have executed the above app.js code using Node, we will get the following output in the console.log file

  • Node Tutorial
  • Guru99 Tutorial

NPM (Node Package Manager) Publish Package

One can publish their own module to their own Github repository.

By publishing your module to a central location, you are then not burdened with having to install yourself on every machine that requires it.

Instead, you can use the install command of npm and install your published npm module.

The following steps need to be followed to publish your npm module

Step 1) Create your repository on GitHub (an online code repository management tool). It can be used for hosting your code repositories.

Step 2) You need to tell your local npm installation on who you are. Which means that we need to tell npm who is the author of this module, what is the email id and any company URL, which is available which needs to be associated with this id. All of these details will be added to your npm module when it is published.

The below commands sets the name, email and URL of the author of the npm module.

npm set init.author.name “Guru99.”

npm set init.author.email “guru99@gmail.com”

npm set init.author.url “http://Guru99.com”

Step 3) The next step is to login into npm using the credentials provided in the last step. To login, you need to use the below command

npm login

Step 4) Initialize your package – The next step is to initialize the package to create the package.json file. This can be done by issuing the below command

npm init

When you issue the above command, you will be prompted for some questions. The most important one is the version number for your module.

Step 5) Publish to GitHub – The next step is to publish your source files to GitHub. This can be done by running the below commands.

git add.
git commit -m "Initial release"
git tag v0.0.1 
git push origin master --tags

Step 6) Publish your module – The final bit is to publish your module into the npm registry. This is done via the below command.

npm publish

Managing third party packages with npm

As we have seen, the “Node package manager” has the ability to manage modules, which are required by Node.js applications.

Let’s look at some of the functions available in the node package manager for managing modules

  1. Installing packages in global mode – Modules can be installed at the global level, which just basically means that these modules would be available for all Node.js projects on a local machine. The example below shows how to install the “express module” with the global option.npm install express –global The global option in the above statement is what allows the modules to be installed at a global level.
  2. Listing all of the global packages installed on a local machine. This can be done by executing the below command in the command promptnpm list –globalBelow is the output which will be shown, if you have previously installed the “express module” on your system.Here you can see the different modules installed on the local machine.

Managing Third party Packages with NPM

  1. Installing a specific version of a package – Sometimes there may be a requirement to install just the specific version of a package. Once you know package name and the relevant version that needs to be installed, you can use the npm install command to install that specific version.The example below shows how to install the module called underscore with a specific version of 1.7.0npm install underscore@1.7.0
  2. Updating a package version – Sometimes you may have an older version of a package in a system, and you may want to update to the latest one available in the market. To do this, one can use the npm update command. The example below shows how to update the underscore package to the latest versionnpm update underscore
  3. Searching for a particular package – To search whether a particular version is available on the local system or not, you can use the search command of npm. The example below will check if the express module is installed on the local machine or not.npm search express
  4. Uninstalling a package – The same in which you can install a package, you can also uninstall a package. The uninstallation of a package is done with the uninstallation command of npm. The example below shows how to uninstall the express modulenpm uninstall express

What is the package.json file

The “package.json” file is used to hold the metadata about a particular project. This information provides the Node package manager the necessary information to understand how the project should be handled along with its dependencies.

The package.json files contain information such as the project description, the version of the project in a particular distribution, license information, and configuration data.

The package.json file is normally located at the root directory of a Node.js project.

Let’s take an example of how the structure of a module looks when it is installed via npm.

The below snapshot shows the file contents of the express module when it is included in your Node.js project. From the snapshot, you can see the package.json file in the express folder.

The Package.json File

If you open the package.json file, you will see a lot of information in the file.

Below is a snapshot of a portion of the file. The express@~4.13.1 mentions the version number of the express module being used.

The Package.json File

Summary

  • A module in Node.js is a logical encapsulation of code in a single unit. Separation into modules makes code more manageable and maintainable for future purposes
  • There are many modules available in the market which can be used within Node.js such as express, underscore, MongoDB, etc.
  • The node package manager (npm) is used to download and install modules which can then be used in a Node.js application.
  • One can create custom NPM modules, extend these modules, and also publish these modules.
  • The Node package manager has a complete set of commands to manage the npm modules on the local system such as the installation, un-installation, searching, etc.
  • The package.json file is used to hold the entire metadata information for an npm module.