2013-06-18 8 views
24

Gibt es einen Weg, um Bower ein Paket grunzen zu lassen, nachdem es von GitHub geklont wurde?Wie bauen Bower das Paket?

Ich versuche, Bower zu verwenden, aber eines der Pakete, die ich verwende, ist die Bootstrap-Erweiterung, x-editierbar. Das Problem ist, dass während andere Pakete eine voll gebaute Version zu Github schieben, so dass, wenn von Bower installiert, Sie eine gebaute Version x-editable erwarten, dass Sie eine Grunt-Datei ausführen, um das Paket zu bauen.

Das ist eine übliche Praxis in anderen Paketmanagern wie npm, aber ich könnte finden, wie Bower es bei der Installation zu machen. Das bedeutet, dass ich einen anderen Mechanismus benötige, um die Installation des Pakets abzuschließen.

Antwort

23

Aufbauend auf Installation ist ein Anti-Pattern und wird dringend in Node empfohlen. Wie Knoten sollten Bower-Pakete vordefiniert sein. Dies liegt daran, dass der Endbenutzer sich nicht darum kümmern muss, was ein Paket für einen Präprozessor oder ein Build-System benötigt.

Ihre besten Optionen sind, entweder den Autor dazu zu überreden, Pre-Build, Fork und Do-it-yourself zu erstellen oder manuell zu erstellen, nachdem Sie die Komponente installiert haben.

Das Bower-Team plant die Möglichkeit, Pakete auf einem Server zu veröffentlichen, ähnlich wie es in npm funktioniert. Dies macht es viel besser für Pakete, die einen Build-Schritt benötigen.

+5

Die meisten der "schweren" Pakete in npm installieren ich benutze einige Build-Phase nach haben. Die Verwendung eines vordefinierten plattformübergreifenden (normalerweise nativen) Codes scheint eine noch schlechtere Option zu sein. Nichtsdestoweniger, auch wenn Bower es als beste Praxis nicht ermutigt, denke ich, dass die Option für spezielle Fälle verfügbar sein sollte. –

+2

Native Erweiterungen sind die Ausnahme in Node, da sie nicht über die Infrastruktur für die Vorkompilierung verfügen, aber sie wird in Betracht gezogen. Eine Option ist bereits verfügbar. Bower hat eine API. Sie können also Ihre eigene Lösung hacken, aber für den normalen Benutzer ist dies keine gute Wahl und wird in Bower niemals empfohlen oder unterstützt. –

+1

@Sinder Meine Frage ist, ob ich eine Build-Phase auf einem Paket erzwingen kann, das nicht von mir veröffentlicht wurde? z.B. x-editable, das sich auf dem Bower-Repository befindet, aber um es verwenden zu können, müssen Sie seine Grunt-Datei ausführen. –

-2

könnten Sie Composer für den Umgang mit Post installieren:

bower.json:

{ 
    "dependencies": { 
     "bootstrap": "*" 
    } 
} 

composer.json:

{ 
    "scripts" : { 
     "post-install-cmd" : [ 
      "bower install --no-color", 
      "lessc bower_components/bootstrap/less/bootstrap.less public/script/bootstrap.css" 
     ] 
    } 
} 

Dann laufe ich composer install:

Loading composer repositories with package information 
Installing dependencies (including require-dev) 
Nothing to install or update 
Generating autoload files 
bower warn Package bootstrap is still using the deprecated "component.json" file 
bower cloning git://github.com/twitter/bootstrap.git 
bower cached git://github.com/twitter/bootstrap.git 
bower fetching bootstrap 
bower checking out bootstrap#v2.3.2 
bower warn Package jquery is still using the deprecated "component.json" file 
bower copying C:\Users\renadm\AppData\Roaming\bower\cache\bootstrap\9d49e0aedf207bebd028e26cc86a9e58 
bower cloning git://github.com/components/jquery.git 
bower cached git://github.com/components/jquery.git 
bower fetching jquery 
bower checking out jquery#1.8.3 
bower copying C:\Users\renadm\AppData\Roaming\bower\cache\jquery\29cb4373d29144ca260ac7c3997f4381 
bower installing bootstrap#2.3.2 
bower installing jquery#1.8.3 

Nachdem Bower die Installation abgeschlossen hat, verarbeitet der LESS-Compiler die .less-Dateien und fügt einen netten bootstrap.css in meinen Öffentlichen Ordner ein. Etwas ähnliches könnte für JavaScript-Dateien mit Closure Compiler getan werden.

+0

Wie unterscheidet es sich von anderen Build-Tools? wie Grunzen? –

4

Es gibt 3 Haken in der Laube, Postinstall kann Ihr Problem lösen, wenn Sie aus irgendeinem Grund nicht wie @Sindre Sorhus vorgefertigt bauen können.

In .bowerrc tun:

{ 
    "scripts": { 
     "preinstall": "<your command here>", 
     "postinstall": "<your command here>", 
     "preuninstall": "<your command here>" 
    } 
} 

Quelle https://github.com/bower/bower/blob/master/HOOKS.md

+0

funktioniert nicht in 1.3.12 – dopatraman