0

我在使用 node-uuid 库时遇到了问题。我正在使用 browserify 进行构建,我发现尽管在支持加密 API 的现代浏览器中运行,但它实际上并没有使用 crypto.getRandomValues 方法来生成随机性。

4

1 回答 1

0

简短的回答:

我们发现问题是由于browserify-shim配置不正确引起的。在 package.json 中,添加以下行:

  "browserify-shim": {
    "node-uuid": "uuid"
  }

更长的答案:

在 uuid.js 中,它有如下初始化:

if (!_rng && _global.crypto && crypto.getRandomValues) {
    // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
    //
    // Moderately fast, high quality
    var _rnds8 = new Uint8Array(16);
    _rng = function whatwgRNG() {
      crypto.getRandomValues(_rnds8);
      return _rnds8;
    };
  }

的值_global是一个匿名对象,而 的值_global.crypto是未定义的。在我们添加上述配置后, 的值_globalwindow并且_global.crypto具有预期值。

原因是,当您配置 browserify-shim 时,我们告诉它 node-uuid 库会将变量导出uuid到调用环境中。在浏览器中,调用环境将是window,因此当它运行 node-uuid 的初始化时,它会进行设置,以便调用环境是窗口。

如果你不这样配置它,那么 browserify-shim 认为 node-uuid 没有返回任何值,所以调用环境被设置为一个匿名对象。

于 2015-11-03T04:02:14.237 回答