2014-06-15 11 views
6

Ich habe eine Anwendung, in Backbone mit Mario geschrieben und einigen anderen Abhängigkeiten, durch Bower verwaltet:Bower Überschreibung Abhängigkeit

{ 
    "name": "admin", 
    "version": "0.1.1", 
    "main": "public/javascripts/app.js", 
    "dependencies": { 
    "lodash": "~2.4.1", 
    "console-polyfill": "~0.1.0", 
    "jquery": "~2.1.1", 
    "normalize-css": "~2.1.2", 
    "marionette": "~1.7.4", 
    "bootstrap": "~3.1.1", 
    "font-awesome": "~4.1.0", 
    "backbone-pageable": "~1.4.5", 
    "moment": "~2.5.1", 
    "swag": "~0.6.1", 
    "jquery-form": "~3.46.0", 
    "jquery-file-upload": "~9.5.7", 
    "underscore.string": "~2.3.3", 
    "bootstrap-switch": "~3.0.1", 
    "joint": "~0.9.0" 
    }, 
    "overrides": { 
    "backbone": { 
     "dependencies": { 
     "lodash": "*", 
     "jquery": "*" 
     }, 
     "main": "backbone.js" 
    }, 
    "backbone.wreqr": { 
     "dependencies": { 
     "backbone": "*" 
     }, 
     "main": "lib/amd/backbone.wreqr.js" 
    }, 
    "backbone-pageable": { 
     "dependencies": { 
     "backbone": "*" 
     }, 
     "main": "lib/backbone-pageable.js" 
    }, 
    "jquery-file-upload": { 
     "dependencies": { 
     "jquery": "*" 
     }, 
     "main": [ 
     "js/vendor/jquery.ui.widget.js", 
     "js/jquery.iframe-transport.js", 
     "js/jquery.fileupload.js" 
     ] 
    }, 
    "underscore.string": { 
     "dependencies": { 
     "lodash": "*" 
     }, 
     "main": "lib/underscore.string.js" 
    }, 
    "joint": { 
     "dependencies": { 
     "lodash": "*" 
     }, 
     "main": "dist/joint.clean.js" 
    } 
    }, 
    "resolutions": { 
    "jquery": "~2.1.1" 
    } 
} 

I Joint.js (http://www.jointjs.com/) hinzufügen mag, das hängt davon ab, lodash (ein Ersatz für Unterstrich), aber ich kann nicht herausfinden, wie dies in meiner Konfiguration ersetzen, da Marionette, Backbone und einige andere Bibliotheken direkt auf Unterstreichung abhängen. Also überschreibt der Unterstrich ladash, und die Anwendung kann nicht korrekt gestartet werden.

+0

Warum lässt du 'lodash'' Unterstrich' nicht überschreiben? Ihre API sollte kompatibel sein. – Bergi

+0

Das war, was ich erwartet hatte, würde passieren, aber unterstreichen am Ende lodash. – mavarazy

+0

Ich habe die Reihenfolge geändert, und lodash als die letzte Abhängigkeit, und es hat funktioniert. Danke für einen Hinweis :) Ich lasse dieses hopping dort ist eine sauberere Möglichkeit, es zu tun, sonst lade ich beide Bibliotheken auf dem Client – mavarazy

Antwort

4

Ich habe die Reihenfolge geändert, und lodash als die letzte Abhängigkeit, und es hat funktioniert.

auch als Lösung gibt es eine Möglichkeit, einen Bower Haken zu haben, wie es in den folgenden Antwort heißt https://stackoverflow.com/a/23289270/575338

wir eine ähnliche Situation, wo wir Backbone auf Unders angewiesen hatte in seiner bower.json, aber Wir verwenden stattdessen Lo-Dash, so dass Bower unnötig Underscore für jede Installation herunterzog. Wir haben automatisierte Prüfungen für die Einhaltung der Drittanbieter-Lizenz, also wollten wir nicht alles, was wir nicht tatsächlich verwenden.

Ich weiß, das ist nicht genau das, was sie bedeutet für, aber Bowers install-hooks kann verwendet werden, nicht benötigt zu reinigen deps nach der Installation (zumindest bis Bower die Art von „nein danke“ Auflösung bekommt man angedeutet beim). In Ihrem .bowerrc:

{ 
    "directory": "app/bower_components", 
    "scripts": { 
     "postinstall": "rm -rf app/bower_components/underscore" 
    } 
} 

Es ist ein bisschen wie ein Hack, aber funktioniert.

+2

Beachten Sie, dass von Version 1.4. of Bower sollten Sie in der Lage sein, ein ignoreDependencies-Array zu Ihrer bower.json hinzuzufügen – gotofritz