NPM is is a package manager for NodeJS. It installs packages so that they can be used with Node applications using the Node require() keyword. NPM uses a repository of NPM packages, similar to the NuGet Gallery package repository.
Bower, on the other hand, calls itself "A package manager for the web". Bower installs front-end frameworks for your website. Bower doesn't have a repository and can grab packages from many places, most notably straight from GitHub!
Use NPM for installing Node packages, things that will be used on the server-side, app building process. Things like:
- Gulp, Grunt, build tools
- CSS Preprocessors (LESS, SASS) Minimization tools, build tool utilities
- Express, web server frameworks
- Testing frameworks
For example, Bower is installed using NPM.
Use Bower for installing front-end packages that are actually used within your application on the client-side. Things like:
- jQuery, Underscore, Lodash and other libraries.
- Angular, Backbone, front-end frameworks
- Bootstrap, Foundation, Font-AWesome and front-end stylesheets