Managing Dependencies in Node.js: An Overview of NPM and Yarn
Published: 2023-03-18 16:20:16

When developing applications, there is a need to utilize external packages to ensure the app functions properly. In software development, these external modules are called dependencies.
Managing dependencies involves ensuring all these modules are properly updated, resolving conflicts like versions and ensuring the project has the necessary tools.

In Node.js, dependencies can be managed using Node Package manager (Npm) and Yarn. Although these two are used in Node.js projects to manage dependencies and ensure the project can access needed packages and run smoothly, they have similarities and differences.
In this article, these two package managers (npm and Yarn) will be reviewed and how they can be used in projects.


## Npm

Npm is a package manager for Node.js, a JavaScript runtime environment that allows developers to run JavaScript code outside a web browser. It is included with Node.js and is used to manage code packages that can be easily installed and used in Node.js projects.

It allows developers to install, update, and manage packages from a centralized repository of publicly available packages. It also enables developers to create and publish packages to the repository for other developers to use.

To use Npm in a Node.js project, you first need to initialise a new project using the command below:


    npm init -y

This will create a `package.json` file in the root of your project and update the file with some default values. This file is used to specify the project's dependencies and other information, such as the project's name, version, and author.

Once you have a `package.json`  file, you can use the command below to install packages and dependencies.


    npm install <package-name>

For example, if you want to install a package for hashing a password, let’s say `bcrypt`, you will run the following command:


    npm install bcrypt


> For a list of available packages you can use for your projects, check https://www.npmjs.com/ 

Npm will automatically download the packages and save them to a `node_modules` directory in your project. You can then import and use the packages in your code as needed.

Npm also provides a command-line interface for managing packages, including commands for updating, uninstalling, and searching for packages in the repository. In addition, Npm allows developers to publish their packages to the repository using the command below.


    npm publish


## Yarn

Yarn is a package manager for Node.js and other programming languages. It was developed by Facebook as an alternative to Npm (Node Package Manager) and is now widely used in the Node.js community.
It offers some advantages over Npm, including faster package installation times, improved reliability, and better support for offline development. Yarn achieves faster installation times by using parallel package downloads and caching downloaded packages. This means that subsequent installations of the same package will be faster because the package is already cached locally.
Yarn also offers improved reliability through its `lockfile` mechanism, which ensures that all developers working on a project are using the same version of packages. This helps to prevent issues where different developers are using different package versions, which can cause conflicts and bugs in the code.

To use Yarn in a Node.js project, you first need to install Yarn on your computer using a package manager such as NPM by using the command below:


    npm install --global yarn


> The above command installs Yarn globally on your PC. 

Once Yarn is installed, you can initialize a new project using the command below, which will create a `package.json` file in the root of your project.


    yarn init 

To install packages using Yarn, use the command below, followed by the name of the package you want to install. 


    yarn add <package-name>

For example, to install the `express` package, you would use the following command:


    yarn add express 

Yarn also provides a command-line interface for managing packages, including commands for updating, uninstalling, and searching for packages in the repository. Additionally, Yarn provides a way for developers to publish their packages to the repository using the command below:


    yarn publish 


> In a project, using Npm and Yarn together is not advisable . Each comes with its own lockfile to manage dependencies; hence one can only stick with one in a project. 


## Differences between NPM and Yarn 

Although both NPM and Yarn are used to manage dependencies in Nodejs, they have some differences.  Let’s go over them in the table below:


| Feature         | NPM                                                                                                                                                        | Yarn                                                                                                                                                                                                      |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Speed           | Npm is slower when installing packages for larger projects for versions less than 5.0. The versions greater than  5.0 has been improved to make it better. | Yarn is generally faster than Npm when it comes to package installation for large projects.                                                                                                               |
| Security        | Npm relies on a less secure mechanism that relies on package names and versions.                                                                           | Yarn has a more secure dependency resolution algorithm than NPM. It uses checksums to ensure that packages are not tampered with during installation.                                                     |
| Offline Support | Npm requires an internet connection to install packages.                                                                                                   | Yarn has better offline support than NPM. It has a cache that can be used to install packages without an internet connection.                                                                             |
| User Interface  | Npm has a less interactive user interface than Yarn.                                                                                                       | Yarn has a more user-friendly command-line interface than NPM. It has more informative error messages and progress bars that make it easier to understand what is happening during package installations. |
| Community       | NPM has a larger community and a longer history than Yarn.                                                                                                 | Yarn has gained popularity in recent years and has a growing community of users and contributors.                                                                                                         |



## Conclusion

In conclusion, managing dependencies is an essential part of developing Node.js applications, and NPM and Yarn are two popular package managers that can help simplify this process. Both tools have their strengths and weaknesses, and choosing between them ultimately comes down to personal preference and the specific needs of your project. Whether you choose Npm or Yarn, it's important to understand the basics of package management and how to use these tools effectively to ensure that your projects run smoothly and are free from dependency conflicts and bugs.

To learn more about the two, check their websites and docs below:


- https://yarnpkg.com/
- https://yarnpkg.com/getting-started
- https://www.npmjs.com/
- https://docs.npmjs.com/