It's probably the most famous dilemma after Chicken or the egg, should I install this dependency in dependencies or in devDependencies?

Let's see what npm and yarn say about it:


dependencies: Packages required by your application in production.
devDependencies: Packages that are only needed for local development and testing.



dependencies: These are your normal dependencies, or rather ones that you need when running your code (e.g. React or ImmutableJS).
devDependencies: These are your development dependencies. Dependencies that you need at some point in the development workflow but not while running your code (e.g. Babel or Flow).


There is a discrepancy between the two approaches, because npm is suggesting to install modules like babel or @types (needed at build time) as dependencies but yarn is suggesting to install them as devDependencies. So what to do?

I decided to give a look to two of the one-line installers I used lately the uber famous create-react-app and the new born create-next-app. They both install all the dependencies as normal one.

"dependencies": {    
  "@types/jest": "24.0.22",
  "@types/node": "12.12.6",
  "@types/react": "16.9.11",
  "@types/react-dom": "16.9.4",
  "react": "^16.11.0",
  "react-dom": "^16.11.0",
  "react-scripts": "3.2.0",
  "typescript": "3.7.2"
package.json created by create-react-app

So create-react-app, that is maintained by Facebook (same maintainer of yarn), is installing all the @types (using yarn) not accordingly to what suggested by yarn itself.

Another reason to adopt the npm convention is installing dependencies with --production (or --prod or -p) flag. npm install --production or yarn --production is going to install only the packages inside dependencies, excluding the one in devDependencies. This could be particularly helpful if you want to install all the dependencies needed to spin up your project. This is not possible if you have your @types or babel files in devDependencies.


Can you build and run your application without this dependency? Yes, devDependencies, No, dependencies.