# Bower (Software)

Bower ist ein freier Paketmanager für clientseitige Webentwicklung. Es ermöglicht das einfache Installieren und Aktualisieren von Programmbibliotheken und Frameworks, mithilfe eines in Node.js geschriebenen Kommandozeilenwerkzeugs.

## Funktionsweise und Konzepte

Bower wird über die Kommandozeile (Shell) gesteuert. Nachfolgend findet sich eine Auflistung der wichtigsten Befehle und Konzepte von Bower.

### Installation

Bower ist ein Kommandozeilenprogramm und benötigt Node.js und wird daher mit Node Package Manager (npm) installiert, für die Installation unter unixoiden Systemen bzw. POSIX-Systemen führt man den Befehl npm install -g bower in der Shell aus um die Installation global auszuführen.
Nach der Installation steht in der Kommandozeile nun der Befehl bower zur Verfügung.

### Packages

Packages sind bei Bower einzelne Programme wie z. B. jQuery und Angular.js, also eigenständige Softwarepakete, Libraries und Frameworks.
Packages können einzeln über die Shell installiert werden, dazu navigiert man in der Shell auf den Ordner und führt bower install [package] aus, „package“ muss durch das entsprechende (zu installierende) Package ersetzt werden.
Dabei gibt es verschiedene Möglichkeiten das Package anzugeben. „Registrierte“ Packages, also durch einen eindeutigen Namen bei Bower identifiziert (dies sind meist größere/bekanntere Softwareprojekte), kann dieser Name allein angegeben werden und sieht bei jQuery z. B. so aus bower install jquery. Es kann auch ein GitHub-Kürzel in der Form Entwickler/Projekt angegeben werden und sieht für Angular.js wie folgt aus bower install angular/angular.js. Darüber hinaus kann auch eine eindeutige Adresse angegeben werden, entweder eine Gitadresse (bower install git://github.com/user/package.git) oder eine HTTP-URL (bower install http://example.com/script.js) angegeben werden.

### Projektinitialisierung und bower.json

Ein Ordner kann mit dem Befehl bower init initialisiert werden, beim Ausführen dieses Befehls wird eine bower.json-Datei angelegt. Dies kann auch selbständig erstellt werden. Eine bower.json sieht wie folgt aus:
Dabei enthält "name" den Projektnamen als String. "version" erwartet einen String mit der aktuellen Version, üblicherweise im Format „Major.Minor.Patch“. "main" enthält optional den/die Pfad(e) maximal einer Datei je Typ (z. B. JavaScript, CSS,…) als String oder Array, welche als Einstiegspunkt zur Verwendung des Projektes angesehen werden kann. "private" ist ein Boolean, wenn auf true gesetzt gibt dies an, dass dieses Projekt nicht zur Veröffentlichung vorgesehen ist. "ignore" nimmt einen Stringarray mit den, für den Produktivgebrauch, zu ignorierenden Dateien als Wert an. "dependencies" sind die, als Hash anzugebenden Abhängigkeiten, die auf jeden Fall erfüllt werden müssen. "devDependencies" sind ebenfalls als Hash zu definierenden Abhängigkeiten, die jedoch nur für die weitergehende Entwicklung (Testing, Dokumentation etc.) benötigt werden.
Die "dependencies" und die devDependencies können auch über die Shellbefehle bower install <package> --save, was das angegeben „package“ zu den „dependencies“ beziehungsweise bower install <package> --save-dev dies fügt das angegebene „package“ zu den „devDependencies“ in der bower.json hinzu.
Führt man den Befehl bower install in einem Ordner aus, in dem eine (ausgefüllte) bower.json-Datei liegt, werden die „dependencies“ und „devDependencies“ gegebenenfalls heruntergeladen und werden standardmäßig im Ordner bower_components/ abgelegt. Das installieren der „devDependencies“ kann mit der Angabe bower install -p, wobei „p“ für „production“ steht verhindert werden.

## Geschichte

Bower wurde von Twitter im Rahmen seiner Open-Source-Initiative im Jahr 2012 initiiert und wird derzeit von einem Team aus 7 Hauptentwicklern (englisch core developer) und 121 Mitwirkenden der GitHub-Community entwickelt (Stand Ende November 2014).
Mit der fortschreitenden Verbreitung des ECMAScript-6-Modulsystems sind viele Projekte und Entwickler auf NPM in Kombination mit Bundler-Software wie Browserify bzw. Webpack umgestiegen. Das Projekt überlegte seit Juni 2016, sich selbst als deprecated zu bezeichnen. Seit Mai 2017 wird auf der Projekt- und Webseite empfohlen, Yarn und Webpack als Ersatz zu verwenden.

## Name

Bower wurde nach der englischen Bezeichnung der Vogelart der Laubenvögel (englisch Bowerbirds) benannt. Bei dieser Vogelart sammelt das Männchen verschiedene farbige Gegenstände, um seine Laube möglichst prächtig zu gestalten, da sich Weibchen mit dem Bauherren der prächtigsten Laube paaren. Bower macht eigenen Angaben zufolge genau das: es sammelt die Programme (Gegenstände) und stellt sie dem Entwickler zur Verfügung um seine Anwendung (Laube) zu entwickeln.

## Logo

Das Logo zeigt einen Goldlaubenvogel bei seinem Balztanz und wurde von Dave DeSandro und Isaac Durazo gestaltet.
Die Logoentwicklung wurde auf GitHub Gist dokumentiert.