0
我遇到了使用node-uuid库的问题。我正在用browserify构建,而且我发现尽管运行在支持crypto API的现代浏览器中,但实际上并没有使用crypto.getRandomValues方法来生成随机性。uuid.js在使用browserify构建时未使用crypto.getRandomValues
我遇到了使用node-uuid库的问题。我正在用browserify构建,而且我发现尽管运行在支持crypto API的现代浏览器中,但实际上并没有使用crypto.getRandomValues方法来生成随机性。uuid.js在使用browserify构建时未使用crypto.getRandomValues
简短的回答:
我们发现问题是由browserify-垫片的配置不正确引起的。在的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
未定义。添加上述配置后,_global
的值为window
,_global.crypto
为预期值。
原因是,当您配置browserify-shim时,我们告诉它node-uuid库会将变量uuid
导出到调用环境中。在浏览器中,调用环境将为window
,因此当它运行node-uuid的初始化时,它会设置事件,以便调用环境成为窗口。
如果你不这样配置,那么browserify-shim认为node-uuid没有返回任何值,所以调用环境被设置为匿名对象。