What's the difference between dependencies, devDependencies, and peerDependencies in NPM package.json file?

Better Stack Team
Updated on March 11, 2024

When you create a new Node.js project, you’ll notice a package.json file in the root directory. This file contains metadata about your project, including the dependencies required to run it. There are three types of dependencies that can be specified in the package.json file: dependenciesdevDependencies, and peerDependencies. Here’s what each of them means:

  • dependencies: These are packages that your application needs to run in production. When you run npm install in your project directory, these packages will be installed automatically. For example, if your application uses the express package, you would list it as a dependency in your package.json file.
  • devDependencies: These are packages that are only needed during development. They are not required to run your application in production. When you run npm install with the -dev flag, these packages will be installed. For example, if you use mocha for testing, you would list it as a devDependency in your package.json file.
  • peerDependencies: These are packages that your package relies on but expects the consumer to provide. They are not installed automatically when someone installs your package. Instead, when someone installs your package, they will get a warning if the specified packages are not found in their node modules. For example, if your package relies on react, you would list it as a peerDependency in your package.json file.

Here’s an example package.json file that includes all three types of dependencies:

 
{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "mocha": "^9.1.3"
  },
  "peerDependencies": {
    "react": "^17.0.2"
  }
}

In this example, express is a dependencymocha is a devDependency, and react is a peerDependency.

Got an article suggestion? Let us know
Explore more
Licensed under CC-BY-NC-SA

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.