2013-11-05 6 views
5

Qual è il modo migliore per includere un'estensione per una libreria comune come jQuery o Knockout con Browserify?Modo corretto per richiedere estensioni con browserify

Ad esempio, con un progetto come knockout-switch-case, le variabili globali ko (a eliminazione diretta) non vengono passate alla chiamata di definizione modulo.

Il codice AMD knockout-switch-case è:

(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) { 

dove aspetta ko (KO) e 'un globale root, che sarebbe normalmente essere window ma quando si utilizza Browserify è Object {} .

Ho provato con l'esempio utilizzando browserify-shim con qualcosa di simile, ma non ha funzionato come previsto (anche se ha funzionato per knockout-mapping, che ha una migliore modulo-danza):

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

mi sento come se dovessi trascurare qualcosa che deve essere abbastanza ovvio, poiché mi aspetto che questo sarebbe un modello di definizione del modulo abbastanza comune per includere qualsiasi jQuery, Knockout o qualsiasi altra estensione per una libreria che si basa su un globale. O forse questo è un problema abbastanza specifico per qualcosa che sta facendo knockout-switch-case.

In ogni caso, pensieri e commenti sinceramente apprezzati.

+0

È necessario spessorare il 'eliminazione diretta-switch-case' e ​​non ko per sé così provare qualcosa del tipo: 'shim (browserify(), { 'knockout-switch-case': { percorso: './js/vendor/knockout-switch-case.js' , esportazioni: null , dipende: {knockout: 'ko'} } }) ' – nemesv

risposta

5

Questo config browserify-shim funziona per me:

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' 
     } 
    } 
}) 

Con questo, è possibile richiedere come al solito: var ko = require('knockout');