# Day 15 of 100days of code.

*I am delving into the intricacies of building RESTful APIs, refining my skills in middleware usage, and exploring the nuances of asynchronous JavaScript. Lets Goooo💪🏼🚀*

### Fundamentals of nodeJS

## What is NPM

NPM stands for node package manager. It is both a command line interface and a package repository from where we can install and manage packages. The NPM command line is automatically installed in our machine when we install nodeJS. [npmjs.com](http://npmjs.com) is the package repository where all the packages are stored and from there we can download and install them. The NPM repository is the largest software registry in the world, it has around 1 million packages, libraries and frameworks. NPM is used across the entire JavaScript development whether frontend or backend.

NPM command line interface is a software that we used to manage and install third party open source packages that we choose to use and include in our project.

We can see the version of NPM we have installed in our machine by running the command `npm -v` in the command line. We can also install packages in the NPM repository using the command line interface.

## Types of packages and installs

When we install a package, it can be classified into 2 categories. The <mark>regular</mark> dependency and the <mark>development</mark> dependency. If our code is dependent on the package then its a <mark>regular</mark> dependency. And the dependency which the working of our code is not dependent on the package is the <mark>development</mark> dependency. The <mark>development</mark> dependency helps in increasing our productivity.

To install packages, we use the command: `npm install package-name` . To specify a particular version of the package we add an @ symbol after the package name and a number signifying the version we want to install. *i.e* : `npm install package-name@4`But without the @symbol npm NPM automatically installs the latest version of the package.

Lets install the `express` package, run: `npm install express` Installing a package automatically adds a `node_modules` folder and a `package.json` file to the application folder and file tree.

Inside the `package.json` file, we notice a new field called dependencies have been created and we have our package listed inside. The express package in this case is a regular dependency 👇🏼

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1706789601882/5471c0a0-fb65-4fa2-b76a-9106ff66c20f.png align="center")

What ever package we download and install from NPM repository we have it stored inside the `node_modules` folder. Once we install a package, that package and all its dependencies will be stored in the `node_modules` folder. And also keep in mind that when deploying our web application we don't deploy the `node_modules` folder.

We need some dev dependencies in other to increase productivity. Lets go ahead and install a dev dependency. We need the `nodemon` package. The `nodemon` package helps us to automatically save our changes. We need the `nodemon` package only for development purpose. In order to specify `nodemon` package as a dev dependency, Lets run the command: `npm install nodemon --save-dev`. This `--save-dev` flag indicates that we want to install the package as a dev dependency.

From our `package.json` file, we see that the `nodemon` package have be installed in our application as a dev dependency. 👇🏼

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1706794191853/056ace9d-9014-4cb1-82c7-32ed2af39f3f.png align="center")

We have 2 types of package installs

* Local install
    
* Global install
    

The <mark>Local</mark> install simply means the package is only available in that project folder and cannot be accessed outside of the folder

The <mark>Global</mark> install simply means the package is installed globally in the machine and can be accessed from any folder or any project directory. The `express` and `nodemon` packages was installed locally that means they cannot be accessed outside of the project folder.

There are some packages that we might need to install globally. The `nodemon` package is one of those packages. We might need the package for all of our node projects. So nodemon is a tool that helps us develop node JS applications by automatically restarting the node application whenever we change something in our file or working directory, this way we get to save lots of time because we don't have to manually save our file whenever we make any changes.

Lets install the nodemon package globally and as a dev dependency as well. We run the command :`npm install -g nodemon--save-dev` .

To use the nodemon package run the command: `nodemon file-name.` And whenever we make any changes in our file, `nodemon` updates and save the changes automatically👇🏼

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1706797535596/7b761922-78c5-4f6c-be8d-c8de08bfe75b.png align="center")

Now we don't have to restart our sever manually, it automatically updates and saves the changes.

That's all for this lesson.

**Next**: *Architectures of nodeJS runtime*

**See you soon**😊🫡✌🏼...
