Why is the node_modules folder not committed to Git?

Dean Schulze picture Dean Schulze · Oct 12, 2013 · Viewed 7.3k times · Source

When I create an AngularJS project with

yo angular 

it creates a node_modules/ directory but puts that directory in .gitignore. When I clone the project elsewhere and run

grunt server

I get

Fatal error: Unable to find local grunt.

If you're seeing this message, either a Gruntfile wasn't found or grunt hasn't been installed locally to your project. For more information about installing and configuring grunt, please see the Getting Started guide:

The getting started guide doesn't say anything about how to handle the missing node_modules/ directory however.

The node_modules/ directory is missing deliberately because yeoman put it in .gitignore.

What's the right way to use Yeoman and Grunt in this case?
Is there some better documentation for Yeoman and Grunt?

Thanks.

Answer

Marplesoft picture Marplesoft · Oct 12, 2013

That is the correct behaviour. The contents of node_modules is not meant to be committed to source control. The idea behind npm is that it tracks all required node dependencies in a file called package.json. This file should be committed to source control. Then on a different machine, you can check out the code and run

npm install

This looks at the package.json file and downloads all required files from the cloud and puts them all into a new node_modules directory.