Managing Dependencies
Project dependencies are managed using the Node Package Manager (npm) and are saved in the package.json.
Dependency Types
There are multiple types of depedencies defined in the package.json: 
dependenciesare packages you’ll be including in your own build.devDependeciesare packages that are part of your development process but not part of the final build.peerDependciesare packages your package depends on but doesn’t include. This allows projects that require your package to use their own dependencies instead of every package including their own.
In our case, things like Webpack and Babel will be in devDependencies and React will be in dependencies. We won’t be using peerDependencies, but the packages we use might.
Dependency Versions
By default, when saving dependencies, npm saves it in the package.json as a minor version requirement as according to the rules of Semantic Versioning. You can change this to be more strict by using the --save-exact flag when running npm install.
I won’t be including the --save-exact flag when referring to npm install in this dojo but I recommend using it to avoid future difficulties when packages update and introduced changes different from those mentioned in this dojo.
You can find a list of representations npm uses for version dependencies in their documentation.
Installing Dependencies
We can install any package from npm’s repository using one of the following commands in our project directory:
  | 
  | 
For a full list of options, check npm’s documentation.
Dependency Files
The files for these dependencies are saved in the node_modules directory at the root of your project. You’ll want to add this directory to your .gitignore.
Updating Dependencies
You can run npm update to update your local dependencies based on your version requirements. Of course, if you’re using --save-exact, npm update won’t achieve anything.
So, to make sure we’re not falling behind versions, we can use third-party tools like npm-check to check and update our dependencies. This is especially useful when using --save-exact as it gives up more control on when to update.

For this dojo, we won’t be referring back to npm-check but it’s worth mentioning.