2013-06-29 11 views
6

Zajmuję się tworzeniem biblioteki A i biblioteki B, B w zależności od A. Chciałbym, używając przeglądarki, aby połączyć je niezależnie, więc w przeglądarce mogłem zrobić:Przeglądaj, aby załadować zależności z wymaganego zakresu globalnego, zamiast oczekiwać, że zbiorą się razem

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

chciałbym połączą je niezależnie jak ja również rozwój biblioteki C, która zależy tylko od a i jeśli a jest zawarty w B to nie będzie dostępny przez C, a jeśli A jest w B i C, mam duplikaty.

Więc zacznę z biblioteki browserifying A:

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

Który działa perfekcyjnie, mogę dystrybuować i inni ludzie mogą rozwijać swoje aplikacje z nim.

Potem browserify B Biblioteka:

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

Ale mam teraz dwa razy, A są ładowane niezależnie w przeglądarce i ponownie pakowane B. Więc używać opcji -i z browserify aby zapobiec nie został uwzględniony:

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

Ale wtedy, gdy B wymaga A, otrzymuje pusty obiekt {} zamiast biblioteki. Biblioteka A jest nadal dostępna w zasięgu globalnym, wykonując polecenie require ("A").

Próbowałem użyć eksternalizacji przez -x, ale nie mogę już wymagać mojej biblioteki od globalnego zakresu.

Udało mi się uzyskać pożądane zachowanie poprzez zhackowanie wygenerowanego wyjścia B, co zmusiło rozdzielczość modułu do uzyskania A z wcześniejszego wymagania, co powoduje, że myślę, że może być łatwe rozwiązanie, ale nie mogę Znajdź to.

Używam browserify 2.18.1

+0

-x, --external powinno być tym, czego szukasz. Zobacz: https://github.com/substack/node-browserify#multiple-bundles – Epeli

+0

@Epeli, próbowałem z opcją --external, ale wydaje się, że nie ma żadnego efektu, ponieważ A jest nadal w B. Próbowałem, podając nazwa modułu: 'browserify -x A -r ./src/B.js:B -o build/B.js' lub poprzez wskazanie pliku: 'browserify -x node_modules/A/A.js -r ./src/B.js:B -o budować/B.js' Każdy pomysł co -x może zaakceptować jako prawidłowe dane wejściowe? Mój problem wydaje się odnosić do tego problemu na [Browser Browser] (https://github.com/substack/node-browserify/issues/404) – Olivier

+0

afaik powinien zaakceptować ścieżkę do pliku js i nazwę modułu. – Epeli

Odpowiedz

1

dwa sposoby patrzenia na to:

  • Think B jak jQuery UI i A jak jQuery. Użytkownicy mogą dołączyć jquery do DOM, jeśli chcą używać jquery-ui. Tak więc, podczas gdy budynek B nie wymaga wcale.

  • Udokumentuj fakt, że B ma wbudowany w to. Użytkownicy, którzy używają B, po prostu nie powinni w ogóle korzystać z A. W tym scenariuszu - oczywiście musisz wymagać A i spakować B razem z A.

  • W ogóle, jeśli masz 2 browserified wiązek, z części wspólnych, które są importowane w SAME stronie wtedy już spadły do ​​problemu organizacji wiązka/uzależnienia, jakie składniki przechodzą w jakim itd. Coś w podstawach tego musi być przejrzane/zmienione