1

我很难在 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] }

正如预期的那样。但是,在浏览器中,这会被记录(注意VectorObject):

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)。

4

0 回答 0