32

I can fully appreciate the benefits of a package manager like Python's pip, Node's npm, or Ruby Gems since they're doing much more than adding files to your applications path.

Maybe I'm missing the point, or I'm being obtuse, but here are the negatives I can see:

  • Separate step when building a project
  • Separate dependency to install via another package manager (yo dawg)
  • More clutter in the projects root with bower.json and / or .bowerrc
  • Reliance on the registry being up to date, correct, and available
  • Some imports / references to things like images won't work
  • Huge overlap with npm, and often unclear which resource to use, when

The positives I can see are these:

  • I don't have to download the dependencies manually
  • Optionally install packages as part of scaffolding based on user prompts or the like

I'd really like to know of any benefits I'm unaware of, and I should say I'm not trying to be provocative I genuinely want to know.

4
  • 1
  • Ultimately, all of the package managers you mention involve downloading dependencies, and they share some of the same "negatives" you listed for Bower. Likewise, Bower shares some of the benefits of npm, pip, and rubygems: for example, Bower makes it easy to update your dependencies to the latest version (this is a big one), and it greatly reduce clutter in your git repo since you don't need to check-in dependency code. – sffc Jan 22 '15 at 3:59
  • 6
    It's a shame this question was closed for being "primarily opinion-based." The OP is asking for expert opinion. "How does this assist me in the development process?" – Dave Kanter Feb 25 '15 at 17:56
  • It looks like the trend is that you should not use bower, it has no tooling or advantages over using npm combined with Browserify. It seems that the industry has spoken and number of module counts for bower is decreasing and npm and Browserify is becoming the standard: quora.com/Why-use-Bower-when-there-is-npm – Brian Ogden Aug 13 '16 at 20:49
12

From the README:

Bower is a package manager for the web. It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. There are no system wide dependencies, no dependencies are shared between different apps, and the dependency tree is flat.

Bower runs over Git, and is package-agnostic. A packaged component can be made up of any type of asset, and use any type of transport (e.g., AMD, CommonJS, etc.).

Bower has many of the benefits of other dependency managers. I'm sure there are others, but the benefits I've noticed so far include:

  • Simplify what might be called declarative dependency management; i.e. you declare your dependencies in bower.json so that other things can determine them easily
  • No need to commit dependencies to version control
  • Semantic versioning is used to help define a range of acceptable versions for a dependency, which makes it easy to update to newer versions within the defined range
  • No need to locate various builds (debug, minified, etc)
  • Simple to use different builds of a dependency for dev vs. prod
  • You can distribute the bower.json file and everyone can get up to speed with a simple "bower install"
6
  • 2
    Definitely wish I'd written the question in a less provocative manner. Really I guess the crucial benefit I've missed is using the API as part of a build / scaffolding process. I'd like to see use of it in the wild somewhere. – Wil Jan 20 '14 at 18:48
  • I became aware of Bower when I bootstrapped an Angular webapp using the Angular generator for Yeoman. Trying that might give you an idea of how it can be used. – Mike Partridge Jan 20 '14 at 19:16
  • I've used Yeoman and Grunt Init before that, and perhaps it's just that my needs have always meant the front end components would never deviate - they would always be Angular, jQuery, Mocha etc. but I can see that if a user wants to swap a test framework from a bootstrap prompt choice list, that would be useful. I think the main advantage that makes sense is bootstrap options and modifiers. Do you think that's fair? – Wil Jan 20 '14 at 20:04
  • 2
    Also portability. You can distribute the bower.json file and everyone can get up to speed with a simple "bower install." – Dave Kanter Feb 25 '15 at 18:49
  • 1
    s/bower/npm/i and this answer is still 100% true. – Qix - MONICA WAS MISTREATED Apr 20 '15 at 18:48

Not the answer you're looking for? Browse other questions tagged or ask your own question.