我很难在浏览器化环境中使用高斯统计库(可作为npm模块使用)。
我正在使用
"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
配置,所有这些都导致了不同的错误。
这里有一个sample project来玩。
任何人都可以提出一个不涉及手动修补的解决方案吗?
修改:更多信息
当我尝试拨打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}
如上所述,我怀疑罪魁祸首是conditionally exposes图书馆的一些代码,但我真的不知道如何解决这个问题。
一个简单的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
。