Alex Rivera | Logout

How do you prevent install of "devDependencies" NPM modules for Node.js (package.json)?

Asked 2012-02-13T21:25:10.277
913

I have this in my package.json file (shortened version):

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

I am using NPM version 1.1.1 on Mac 10.6.8.

When I run the following command from the project root, it installs both the dependencies and devDependencies:

npm install

I was under the impression that this command installed the devDependencies:

npm install --dev

How do I make it so npm install only installs dependencies (so production environment only gets those modules), while something like npm install --dev installs both dependencies and devDependencies?

Edit
Report

2 Answers

1389

The npm install command will install the devDependencies along other dependencies when run inside a package directory, in a development environment (the default).

In version 8.x and above use --omit=dev flag to install only regular dependencies:

npm install --omit=dev

This will install only dependencies, and not devDependencies, regardless of the value of the NODE_ENV environment variable.

If you use 6.x or an earlier version, you need to use the --only=prod flag instead.

Note:
Before v3.3.0 of npm (2015-08-13), the option was called --production, i.e.

npm install --production

You may also need --no-optional flag.

answered 2012-02-14T11:33:28.260
23

When using "npm install" the modules are loaded and available throughout your application regardless of if they are "devDependencies" or "dependencies". Sum of this idea: everything which your package.json defines as a dependency (any type) gets installed to node_modules.

The purpose for the difference between dependencies/devDependencies/optionalDependencies is what consumers of your code can do w/ npm to install these resources.

Per the documentation: https://npmjs.org/doc/json.html...

If someone is planning on downloading and using your module in their program, then they probably don't want or need to download and build the external test or documentation framework that you use.

In this case, it's best to list these additional items in a devDependencies hash.

These things will be installed whenever the --dev configuration flag is set. This flag is set automatically when doing npm link or when doing npm install from the root of a package, and can be managed like any other npm configuration param. See config(1) for more on the topic.

However, to resolve this question, if you want to ONLY install the "dependencies" using npm, the following command is:

npm install --production

This can be confirmed by looking at the Git commit which added this filter (along with some other filters [listed below] to provide this functionality).

Alternative filters which can be used by npm:

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

@dmarr try using npm install --production

answered 2013-04-06T20:08:12.607

Your Answer