What is the difference between –save and –save-dev?

The difference between --save and --save-dev may not be immediately noticeable if you have tried them both on your own projects. So here are a few examples…

Let’s say you were building an app that used the moment package to parse and display dates. Your app is a scheduler so it really needs this package to run, as in: cannot run without it. In this case you would use

npm install moment --save

This would create a new value in your package.json

"dependencies": {
   "moment": "^2.17.1"

When you are developing, it really helps to use tools such as test suites and may need jasmine-core and karma. In this case you would use

npm install jasmine-core --save-dev
npm install karma --save-dev

This would also create a new value in your package.json

"devDependencies": {
    "jasmine-core": "^2.5.2",
    "karma": "^1.4.1",

You do not need the test suite to run the app in its normal state, so it is a --save-dev type dependency, nothing more. You can see how if you do not understand what is really happening, it is a bit hard to imagine.

Taken directly from NPM docs docs#dependencies


Dependencies are specified in a simple object that maps a package name
to a version range. The version range is a string that has one or
more space-separated descriptors. Dependencies can also be identified
with a tarball or git URL.

Please do not put test harnesses or transpilers in your dependencies
object. See devDependencies
, below.

Even in the docs, it asks you to use --save-dev for modules such as test harnesses.

Leave a Comment