In this blog, we will discuss the topic of NPM for Node.js. We can explain NPM in two ways. Firstly, NPM is an online repository to publish open-source Node.js projects. Secondly, it is a command-line utility for interacting with the repository that aids in package installation, version management, and dependency management. There are many Node.js libraries and applications being published on NPM and many more added every day. You can search for these applications on https://www.npmjs.com/.

NPM for Node.js

Also Read: Unit testing node js: Everything you need to know

NPM for Node.js

NPM comes along with Node.js installable after the v0.6.3 version. We are discussing NPM for Node.js. In order to verify it, you have to open the console and type the command given below and see the result.

$ npm --version
2.7.1

In case where you are using an version of NPM then we recommend you to update it to the latest version. You can do so easily by following the command from root:

$ sudo npm install npm -g
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
npm@2.7.1 /usr/lib/node_modules/npm

Installing Modules using NPM

In order to install any Node.js module, there is a simple syntax that you have to follow:

$ npm install <Module Name>

For instance, you can use the following command to install a famous Node.js web framework module called express −

$ npm install express

You can use the following module in your js file:

var express = require('express');

Global vs Local Installation

Now, in this blog of NPM for Node.js, we will discuss the difference between Global vs Local installation. NPM installs any dependency in the local mode by default. In this sentence, local mode means the package installation in node_modules directory available in the folder where Node application is present. You can access locally deployed packages through require() method. For instance, when you install express module, it will create node_modules directory in the current directory. This is where it installed the express module.

$ ls -l
total 0
drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules

You have an alternative option to use npm ls command to list down all the local installation of modules.

The storage of globally installed packages/dependencies is in system directory. You can use such dependencies in CLI (Command Line Interface) function of any node.js. However, you cannot import using require() in Node application directly. Now, we will try to install the express module using global installation.

$ npm install express -g

A similar result will be produced but the module will be installed globally. The first line here will show the module version and the location of its installation.

express@4.12.2 /usr/lib/node_modules/express
├── merge-descriptors@1.0.0
├── utils-merge@1.0.0
├── cookie-signature@1.0.6
├── methods@1.1.1
├── fresh@0.2.4
├── cookie@0.1.2
├── escape-html@1.0.1
├── range-parser@1.0.2
├── content-type@1.0.1
├── finalhandler@0.3.3
├── vary@1.0.0
├── parseurl@1.3.0
├── content-disposition@0.5.0
├── path-to-regexp@0.1.3
├── depd@1.0.0
├── qs@2.3.3
├── on-finished@2.2.0 (ee-first@1.1.0)
├── etag@1.5.1 (crc@3.2.1)
├── debug@2.1.3 (ms@0.7.0)
├── proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9)
├── send@0.12.1 (destroy@1.0.3, ms@0.7.0, mime@1.3.4)
├── serve-static@1.9.2 (send@0.12.2)
├── accepts@1.2.5 (negotiator@0.5.1, mime-types@2.0.10)
└── type-is@1.6.1 (media-typer@0.3.0, mime-types@2.0.10)

In order to check all the modules that are installed globally, you can use the following command:

$ npm ls -g

Using package.json

package.json is available in the root directory of any Node application/module. You can use it to define the properties of a package. Now, we will open package.json of express package present in node_modules/express/

{
   "name": "express",
      "description": "Fast, unopinionated, minimalist web framework",
      "version": "4.11.2",
      "author": {
      
         "name": "TJ Holowaychuk",
         "email": "tj@vision-media.ca"
      },
   
   "contributors": [{
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
   }, 
   
   {
      "name": "Ciaran Jessup",
      "email": "ciaranj@gmail.com"
   },
   
   {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
   },
   
   {
      "name": "Guillermo Rauch",
      "email": "rauchg@gmail.com"
   },
   
   {
      "name": "Jonathan Ong",
      "email": "me@jongleberry.com"
   },
   
   {
      "name": "Roman Shtylman",
      "email": "shtylman+expressjs@gmail.com"
   },
   
   {
      "name": "Young Jae Sim",
      "email": "hanul@hanul.me"
   } ],
   
   "license": "MIT", "repository": {
      "type": "git",
      "url": "https://github.com/strongloop/express"
   },
   
   "homepage": "https://expressjs.com/", "keywords": [
      "express",
      "framework",
      "sinatra",
      "web",
      "rest",
      "restful",
      "router",
      "app",
      "api"
   ],
   
   "dependencies": {
      "accepts": "~1.2.3",
      "content-disposition": "0.5.0",
      "cookie-signature": "1.0.5",
      "debug": "~2.1.1",
      "depd": "~1.0.0",
      "escape-html": "1.0.1",
      "etag": "~1.5.1",
      "finalhandler": "0.3.3",
      "fresh": "0.2.4",
      "media-typer": "0.3.0",
      "methods": "~1.1.1",
      "on-finished": "~2.2.0",
      "parseurl": "~1.3.0",
      "path-to-regexp": "0.1.3",
      "proxy-addr": "~1.0.6",
      "qs": "2.3.3",
      "range-parser": "~1.0.2",
      "send": "0.11.1",
      "serve-static": "~1.8.1",
      "type-is": "~1.5.6",
      "vary": "~1.0.0",
      "cookie": "0.1.2",
      "merge-descriptors": "0.0.2",
      "utils-merge": "1.0.0"
   },
   
   "devDependencies": {
      "after": "0.8.1",
      "ejs": "2.1.4",
      "istanbul": "0.3.5",
      "marked": "0.3.3",
      "mocha": "~2.1.0",
      "should": "~4.6.2",
      "supertest": "~0.15.0",
      "hjs": "~0.0.6",
      "body-parser": "~1.11.0",
      "connect-redis": "~2.2.0",
      "cookie-parser": "~1.3.3",
      "express-session": "~1.10.2",
      "jade": "~1.9.1",
      "method-override": "~2.3.1",
      "morgan": "~1.5.1",
      "multiparty": "~4.1.1",
      "vhost": "~3.0.0"
   },
   
   "engines": {
      "node": ">= 0.10.0"
   },
   
   "files": [
      "LICENSE",
      "History.md",
      "Readme.md",
      "index.js",
      "lib/"
   ],
   
   "scripts": {
      "test": "mocha --require test/support/env 
         --reporter spec --bail --check-leaks test/ test/acceptance/",
      "test-cov": "istanbul cover node_modules/mocha/bin/_mocha 
         -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
      "test-tap": "mocha --require test/support/env 
         --reporter tap --check-leaks test/ test/acceptance/",
      "test-travis": "istanbul cover node_modules/mocha/bin/_mocha 
         --report lcovonly -- --require test/support/env 
         --reporter spec --check-leaks test/ test/acceptance/"
   },
   
   "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
   "bugs": {
      "url": "https://github.com/strongloop/express/issues"
   },
   
   "_id": "express@4.11.2",
   "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
   "_from": "express@*",
   "_npmVersion": "1.4.28",
   "_npmUser": {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
   },
   
   "maintainers": [{
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
   },
   
   {
      "name": "jongleberry",
      "email": "jonathanrichardong@gmail.com"
   },
   
   {
      "name": "shtylman",
      "email": "shtylman@gmail.com"
   },
   
   {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
   },
   
   {
      "name": "aredridel",
      "email": "aredridel@nbtsc.org"
   },
   
   {
      "name": "strongloop",
      "email": "callback@strongloop.com"
   },
   
   {
      "name": "rfeng",
      "email": "enjoyjava@gmail.com"
   }],
   
   "dist": {
      "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
      "tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz"
   },
   
   "directories": {},
      "_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
      "readme": "ERROR: No README data found!"
}

Attributes of Package.json

  • name − name of the package
  • homepage − homepage of the package
  • author − author of the package
  • version − version of the package
  • description − description of the package
  • contributors − name of the contributors to the package
  • dependencies − list of dependencies. NPM automatically installs all the dependencies mentioned here in the node_module folder of the package.
  • keywords − keywords
  • repository − repository type and URL of the package
  • main − entry point of the package

Uninstalling a Module

Now in the blog of NPM for Node.js, we will learn uninstallation of a module. You can use the following command to uninstall Node.js module.

$ npm uninstall express

After uninstalling the NPM package, you can verify it by looking at the content of /node_modules/ directory or type the following command −

$ npm ls

Updating a Module

In order to update package.json, you have to change the version of the dependency to be updated. Then, run the command mentioned below:

$ npm update express

Search a Module

Now on the topic of NPM for Node.js, we will discuss searching a module. You have to search the name of the package by using NPM.

$ npm search express

Create a Module

The creation of module require generation of package.json. For instance, we will generate package.json using NPM. And this will generate the basic skeleton of the package.json.

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.

See 'npm help json' for definitive documentation on these fields
and exactly what they do.

Use 'npm install <pkg> --save' afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (webmaster)

It is necessary to provide all the required information relating to your module. With the help of the above-mentioned package.json file, you can understand the meaning of different information in demand. After the generation of package.json, use the command given below to register yourself with NPM repository site using a valid email address.

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) ayushupadhyay5@gmail.com

Now you can publish your module by using the following command:

$ npm publish

The module will be published in the repository if there is no problem with your module. Then, it will be accessible to install using NPM like any other Node.js module.

Conclusion

We hope that this blog of NPM for Node.js is helpful to you. Thank you reading our blog!