2014-09-24 17 views
6

Próbuję zrestrukturyzować bibliotekę, która korzysta z Browserify, zmieniając niektóre moduły z pakietu za pomocą browserify-shim. W szczególności biblioteka używa require ("codemirror"), ale chcę dostarczyć pakiet, który nie zawiera CodeMirror, ale raczej użyje tego, który jest dostarczany przez CDN.Zmniejszanie zależności zależności za pomocą browserify-shim

Więc mam browserify podkładkę-config w moim package.json jak

"browserify-shim": { 
    "jquery": "global:jQuery", 
    "codemirror": "global:CodeMirror" 
    } 

tej pory tak dobrze. require ('jquery') i require ('codemirror') zniknęły z pakietu z przeglądarką i zostały zastąpione przez oczekiwany fragment kodu, aby pobrać jQuery i CodeMirror z obiektu window.

Biblioteka wymaga również niektórych dodatków CodeMirror. Na przykład require ("codemirror/addon/hint/show-hint.js"). W porządku. Chcę, aby ten dodatek był dołączony. Jednak w tym dodatku znajduje się opakowanie UMD, które zawiera żądanie ("../../ lib/codemirror"). Browserify widzi to i łączy w sobie CodeMirror z /node_modules/codemirror/lib/codemirror.js z tego powodu (myślę). Chcę tego używać window.CodeMirror jak zdefiniowano w codemirror shim, ale nie można go znaleźć. Próbowaliśmy wiele odmian tym następujące:

"browserify-shim": { 
    "jquery": "global:jQuery", 
    "codemirror": "global:CodeMirror", 
    "../../lib/codemirror": "global:CodeMirror", 
    "codemirror/addon/hint/show-hint.js": { 
     "exports":null, 
     "depends":["../../lib/codemirror:CodeMirror"] 
    } 
    } 

zależnymi ("../../ lib/CodeMirror") nie będzie odejdź! Jestem pewien, że czegoś mi brakuje.

Używam tego ze skryptu Gulp, ale nie sądzę, że powinno to mieć znaczenie. Wersja Browserify 3.38.1. Browserify-shim wersja 3.7.0.

Wszelkie pomysły?

+0

Wygląda na to, że przeglądarka-shim mogła być niewłaściwa. Opcji Browserify bundleExternal = false może rozwiązać problem. Badanie ... –

+0

bundleExternal = false nie jest pełną odpowiedzią, ponieważ pozostawia początkowe "wymagane" instrukcje w miejscu. Zatem nadal potrzebna jest opcja browserify-shim, jak w pierwszym przykładzie. Ale to pomaga. Dzięki temu ustawieniu mogę bezpośrednio .require ("codemirror/addon/hint/show-hint.js") przed dołączeniem do skryptu Gulp, aby uzyskać dodatek, ale zewnętrzne wymagania CodeMirror zostaną pominięte, wydaje się . –

+0

Wygląda na to, że w najnowszej wersji przeglądarki istnieje opcja zastosowania {global: true} do transformacji shift, co spowoduje, że będzie działała na zależnościach! Dzięki temu możemy z powodzeniem zasymulować żądanie ("../../ lib/codemirror"). –

Odpowiedz

11

Jeśli dodasz browserify-shim z {global: true}, powinno to być również zastosowane do zależności twoich zależności (i tak dalej), co powinno, miejmy nadzieję, zrobić, co chcesz.

Zakładając, że używasz surowego browserify w Gulpfile zamiast:

b.transform('browserify-shim'); 

zrobić:

b.transform({global: true}, 'browserify-shim'); 

Jeśli używasz gulp-browserify, nie jestem pewien, czy istnieje jakikolwiek sposób określić globalne transformacje.

+0

To mi się udało. Dzięki! – poshaughnessy

+0

Dziękujemy! To też zadziałało dla mnie. –

-1
{global: true} 

działa dla mnie ... Dlaczego nie jest to domyślne?

+1

Podczas gdy ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego _why_ i/lub _how_ ten kod odpowiada na pytanie, które znacznie poprawiłoby jego długoterminową wartość . Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie w postaci . –