For example, to install a package, run:
bower install jquery
This will download jQuery to
./components/jquery. That's it. The idea is that Bower does package management and package management only.
npm install bower -g
Your best friend at this stage is probably
To install a package:
bower install jquery bower install git://github.com/maccman/package-jquery.git bower install http://code.jquery.com/jquery-1.7.2.js bower install ./repos/jquery
As you can see, packages can be installed by name, Git endpoint, URL or local path.
During install you can have Bower add an entry to your component.json as well:
bower install --save jquery
To update a package, reference it by name:
bower update jquery-ui
To list installed packages:
To search for packages:
bower search [name]
To list all the available packages, just call
bower search without specifying a name.
You can create a
component.json file in your project's root, specifying all of its dependencies. This is similar to Node's
package.json, or Ruby's
Gemfile, and is useful for locking down a project's dependencies.
Put this under your project's root, listing all of your dependencies. When you run
bower install, Bower will read this
component.json file, resolve all the relevant dependencies and install them.
dependencies are the only properties that are used by Bower. If you have several files you're distributing as part of your package, pass an array to
main like this:
There should only be at most one file per file type in the
main list. So only one
Dependencies are installed locally via the
bower install command. First they’re resolved to find conflicts. Then they’re downloaded and unpacked in a local subdirectory called
./components, for example:
You can also install packages one at a time
bower install git://my/git/thing
There are no system wide dependencies, no dependencies are shared between different apps, and the dependency tree is flat.
The easiest approach is to use Bower statically, just reference the packages manually from a script tag:
For more complex projects, you'll probably want to concatenate your scripts. Bower is just a package manager, but there are lots of awesome libraries out there to help you do this, such as Sprockets and RequireJS.
For example, to use Sprockets:
environment = Sprockets::Environment.newenvironment.append_path 'components'environment.append_path 'public'run environment
Bower also makes available a source mapping – this can be used by build tools to easily consume Bower components.
If you pass the option
--map to bower's
list command, it will generate a JSON with dependency objects. Alternatively, you can pass the
--paths flag to the
list command to get a simple path to name mapping:
To register a new package, it's as simple as specifying a
component.json, pushing the package to a Git endpoint, say GitHub, and running:
bower register myawesomepackagename git://github.com/maccmans/face
There's no authentication or user management. It's on a first come, first served basis. Think of it like a URL shortener. Now anyone can run
bower install myawesomepackagename, and get your library installed.
Bower then makes available a simple programmatic API which exposes the package dependency model, so that existing build tools (like Sprockets, LoadBuilder, curls.js, Ender, etc.) can consume it and build files accordingly.
What distinguishes Bower from Jam, Volo, Component, or Ender? What does it do better?
Bower is a lower level component than Jam, Volo, Component, or Ender. These managers could consume Bower as a dependency.
Bower's aim is simply to install Git paths, resolve dependencies from a
component.json, check versions, and then provide an API which reports on these things. Nothing more. This is a major diversion from past attempts at browser package management.
Bower offers a generic, unopinionated solution to the problem of package management, while exposing an API that can be consumed by a more opinionated build stack.
Volo is an arguably more established project and works with the GitHub search API. Will it take long for Bower to contain a decent number of packages?
Bower (being a Git powered package manager) should, in theory, be capable of consuming every package that Volo does, with the additional benefit of supporting internal networks and other Git repositories not hosted on GitHub.
We recently saw what happened when the main NPM registry went down. Is a single point of failure possible for Bower and if so, do you have redundancy planned?
There's no redundancy planned at the moment, as Bower just installs Git URLs. It's up to the URL provider to establish redundancy.
Isn't having a
package.json file going to conflict with my npm's
package.json? Will this be a problem?
Don't use a
package.json – use a
Bower is an open-source Twitter project. How well can we expect it to be maintained in the future?
Twitter is in the process of migrating its frontend architecture onto Bower, so it's fairly safe to say it will be maintained and invested in going forward.
Have a question? Ask on our mailing list!
Thanks for assistance and contributions:
Copyright 2012 Twitter, Inc.
Licensed under the MIT License