npm モジュールとして利用できる gauss 統計ライブラリを browserify コンテキストで使用するのに苦労しています。
私は使用しています
"devDependencies": {
"browserify": "4.2.3",
"gauss": "0.2.12"
}
および次の単純なエントリ スクリプト:
// app.js
var gauss = require('gauss');
var v = new gauss.Vector([1, 2, 3]);
console.log('It works: ' + v);
これを実行browserify
して結果のバンドルをブラウザーにロードすると、TypeError: object is not a function
エラーが発生しますが、ノードではすべてが期待どおりに機能します。
問題は、ライブラリが自分自身を公開しようとする方法に関係していると思います。手動で次のようなものを追加すると機能するためです。
if (window.gauss) {
module.exports = window.gauss;
}
のメインファイルにgauss
.
さまざまな構成を試しましたがbrowserify-shim
、そのすべてが将来的に別のエラーにつながります。
これは、いじるサンプルプロジェクトです。
手動でのパッチ適用を伴わない解決策を思いつく人はいますか?
編集:詳細情報
を呼び出そうとすると、例外がスローされますnew gauss.Vector()
。gauss.Vector
定義されていますが、関数ではありません。
私app.js
がちょうどに変更した場合
var gauss = require('gauss');
console.log(gauss);
ノードで、私は得る
{ version: '0.2.12',
Collection: [Function],
Vector: [Function],
TimeSeries: [Function] }
予想通り。ただし、ブラウザーでは、これはログに記録されます ( であることに注意Vector
してくださいObject
)。
Object {version: "0.2.12", Collection: Object, Vector: Object, TimeSeries: Object}
上で述べたように、犯人はライブラリを条件付きで公開するコードであると思われますが、これにどのように対処できるかはよくわかりません。
次のような単純な browserify-shim 構成
"browser": {
"gauss": "./node_modules/gauss/index.js"
},
"browserify-shim": {
"gauss": { "exports": "gauss" }
},
Error: Cannot find module './lib/gauss'
ノードとブラウザの両方で結果が得られました(./lib/gauss
では必須ですgauss/index.js
)。