2013-11-05 12 views
5

jQueryやKnockoutのような共通ライブラリの拡張子をBrowserifyとするのが最も良い方法は何ですか?browserifyで拡張機能を要求する正しい方法

たとえば、knockout-switch-caseのようなプロジェクトでは、グローバルko(ノックアウト)変数はモジュール定義呼び出しに渡されません。

ノックアウトスイッチケース用AMDコードがある:

それは通常 windowされるであろう、 rootにグローバルであることが ko(ノックアウト)を期待するが、Browserifyを使用する場合、それは Object {}ある
(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) { 

は、私はこのようなものでbrowserify-shimを使用した例を試してみましたが、期待通り(それが良いモジュールダンスを持っているknockout-mappingための仕事、やったが)それは動作しませんでした:私は感じる

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

をjQuery、Knockout、またはグローバルに依存するライブラリのその他の拡張機能を含めるためのかなり一般的なモジュール定義パターンであると期待しているので、私はかなり明白でなければならないものを見落とさなければならないかのように。あるいは、これは何かにかなり固有の問題です。ノックアウトスイッチケースがやっています。

いずれにしても、みなさまのご意見、ご感想をよろしくお願い申し上げます。

+0

をあなたは 'ノックアウトスイッチ-case'なくKOので、自分自身をシムする必要があります次のようなものを試してみてください: 'shim(browserify()、{ 'ノックアウトスイッチケース':{ パス: './js/vendor/knockout-switch-case.js' 、exports:null 、 {knockout: 'ko'} } }) ' – nemesv

答えて

5

このbrowserify-シムconfigが私の作品:それと

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

、あなたはいつものように必要とすることができますvar ko = require('knockout');

関連する問題