2013-06-29 3 views
6

Ich entwickle Bibliothek A und Bibliothek B, B abhängig von A. Ich möchte mit browserify sie unabhängig voneinander bündeln in meinem Browser konnte ich tun:Browserify, um Abhängigkeiten vom globalen Umfang zu laden, statt zu erwarten, dass sie zusammengebündelt werden

var A = require("A"); 
var B = require("B"); 

ich mag würde sie unabhängig bündeln, wie ich bin auch Bibliothek C zu entwickeln, das auf A hängt nur und wenn A in B enthalten ist, dann wird es nicht zugänglich sein durch C, und wenn A in B und C ist, habe ich Duplikate.

So beginne ich mit browserifying Bibliothek A:

browserify -r ./src/A.js:A -o build/A.js 

, die perfekt funktioniert gut, ich kann A verteilen und andere Menschen ihre Anwendungen mit ihm entwickeln können.

Dann browserify I-Bibliothek B:

browserify -r ./src/B.js:B -o build/B.js 

Aber ich habe jetzt zweimal, bis A wird unabhängig im Browser und erneut verpackt mit B. So verwende ich die Option -i von browserify geladen zu verhindern es vor dem inbegriffen:

browserify -r ./src/B.js -o build/B.js -i A 

Aber dann, wenn B A erfordert, ist es ein leeres Objekt bekommt {} anstelle der Bibliothek. Die Bibliothek A obwohl ist immer noch aus dem globalen Bereich verfügbar, indem Sie ("A") erfordern.

Ich habe versucht, die Externalise-Sache mit -x, aber dann kann ich nicht meine Bibliothek aus dem globalen Bereich mehr verlangen.

Ich schaffte es, das Verhalten, das ich wollte, durch das Hacken der generierten Ausgabe von B zu bekommen, zwang die Modulauflösung, A von einer vorherigen Anforderung zu bekommen, was mich denken lässt, dass es eine einfache Lösung geben kann, aber ich kann nicht finde es.

Ich verwende browserify 2.18.1

+0

-x, --extern sollte was Sie suchen. Siehe: https://github.com/substack/node-browserify#multiple-bundles – Epeli

+0

@Epeli, versuchte ich mit der --external Option, aber es scheint keine Wirkung zu haben, da A immer noch in B. Ich versuchte, indem ich die Modulname: 'browserify -x A -r ./src/B.js:B -o build/B.js' oder auf die Datei verweist: 'browserify -x node_modules/A/A.js -r ./src/B.js:B -o build/B.js' Jede Idee, was -x Kann als gültige Eingabe akzeptieren? mein Problem scheint sich auf dieses Problem beziehen auf [browserify's GitHub] (https://github.com/substack/node-browserify/issues/404) – Olivier

+0

afaik sollte es Pfad zu einer js-Datei und einem Modulnamen akzeptieren. – Epeli

Antwort

1

Zwei Wege, es zu betrachten:

  • Denken Sie an B wie jquery-ui und A wie jquery. Es ist den Benutzern überlassen, die jquery in das DOM aufzunehmen, wenn sie jquery-ui verwenden möchten. Also während Gebäude B überhaupt kein A benötigt.

  • Dokumentieren Sie die Tatsache, dass B A eingebaut hat. Die Benutzer, die B verwenden, sollten A überhaupt nicht einschließen. In diesem Szenario müssen Sie natürlich A benötigen und B zusammen mit A bündeln.

  • Im Allgemeinen, wenn Sie 2 browserified Bündel haben, mit gemeinsamen Teile, die dann in das Problem der Bündel Organisation/Abhängigkeit, gefallen Sie haben bereits in der SAME Seite importiert werden, welche Komponenten in dem, was usw. gehen Etwas in den Grundlagen davon muss überprüft/geändert werden

Verwandte Themen