2013-11-05 10 views
5

Jaki jest najlepszy sposób na dodanie rozszerzenia do wspólnej biblioteki, takiej jak jQuery lub Knockout z numerem Browserify?Prawidłowy sposób na wymaganie rozszerzeń za pomocą przeglądarki przeglądania

Na przykład przy projekcie takim jak knockout-switch-case globalne zmienne ko (nokaut) nie są przekazywane do wywołania definicji modułu.

Kod AMD dla pucharowej-switch-case jest:

(function (root, factory) { 
    if (typeof define === 'function' && define.amd) { 
     // AMD. Register as an anonymous module. 
     define(['knockout'], factory); 
    } else { 
     // Browser globals 
     factory(root.ko); 
    } 
}(this, function(ko) { 

gdzie oczekuje ko (nokaut) jest globalnym na root, które normalnie byłyby window ale podczas korzystania Browserify to Object {} .

Próbowałem z przykładu używając browserify-shim z czymś takim, ale to nie działa zgodnie z oczekiwaniami (chociaż to nie działa dla knockout-mapping, która ma lepszy moduł-dance):

knockout: 
    path: VENDOR_PATH + '/knockout.js' 
    exports: 'ko' 
    depends: 
     jquery: '$' 

czuję tak, jakbym musiał przeoczyć coś, co musi być całkiem oczywiste, ponieważ spodziewam się, że będzie to dość powszechny wzorzec definicji modułów obejmujący jQuery, Knockout lub jakiekolwiek inne rozszerzenie biblioteki, która opiera się na globalnej. A może jest to kwestia dość specyficzna dla czegoś, co robi -knockout-switch-case.

W każdym razie, myśli i komentarze są mile widziane.

+0

Trzeba pasowana na 'nokaut-Switch-case' i sama więc nie ko spróbuj czegoś takiego: 'shim (browserify(), { 'knockout-switch-case': { ścieżka: './js/vendor/knockout-switch-case.js' , eksport: null , zależy: {nokaut: "ko"} } }) ' – nemesv

Odpowiedz

5

Ta podkładka browserify-config działa dla mnie:

shim(browserify(), { 
    jquery: { 
     path: './js/vendor/jquery.js', 
     exports: '$' 
    }, 
    'knockout': { 
     path: './js/vendor/knockout.js', 
     exports: 'ko', 
     depends: { 
      jquery: '$' 
     } 
    }, 
    'knockout-switch-case': { 
     path: './js/vendor/knockout-switch-case.js', 
     exports: null, 
     depends: { 
      knockout: 'ko' 
     } 
    } 
}) 

Z tym, można wymagać jak zwykle: var ko = require('knockout');

Powiązane problemy