我很难在 browserify 上下文中使用 gauss 统计库,该库可作为 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
配置,所有这些都导致了不同的错误。
这是一个可以玩的示例项目。
谁能想出一个不涉及手动修补的解决方案?
编辑:更多信息
当我尝试调用时抛出异常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
)。