We have several package managers. Each of these package managers are designed with specific needs in mind and they each handle specific tasks better than the others. Because of their different strengths, it is common to use all three of them within the same .Net web application.
What is it? .Net developers are likely to be very familiar with this. It is a package manager that mainly deals with .NET assemblies.
What it is good for? It is nicely integrated within Visual Studio and great for loading .Net assemblies and libraries such as Entity Framework and ASP.NET Identity.
NPM (Node Package Manager)
What is it? Designed specifically for node modules, but is also ideal for loading packages that are used during development time. Unlike Bower, NPM supports nested dependency trees. Meaning, NPM may actually load multiple versions of a component on your machine.
What it is good for? Great for managing developer tools like Yeoman, Grunt, Gulp, and testing tools. Its nested dependency tree makes it great for avoiding dependency conflicts.
What is it? Bower is optimized for front-end components. Bower uses a flat dependency tree, requiring only one version for each package, reducing page load to a minimum. So where NPM aims for stability, bower aims for a smaller/faster footprint.