uuid.js 使用 browserify 构建时不使用 crypto.getRandomValues
uuid.js not using crypto.getRandomValues when built with browserify
我 运行 使用 node-uuid 库遇到问题。我正在使用 browserify 构建,我发现尽管 运行 在支持加密 API 的现代浏览器中,它实际上并没有使用 crypto.getRandomValues 方法生成 运行多愁善感。
简答:
我们发现问题是由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
的值未定义。我们添加上面的配置后,_global
的值为window
,_global.crypto
的值为预期值。
原因是,当您配置 browserify-shim 时,我们告诉它 node-uuid 库会将变量 uuid
导出到调用环境中。在浏览器中,调用环境将为 window
,因此当它运行 node-uuid 的初始化时,它会设置调用环境为 window.
如果您不这样配置,那么 browserify-shim 认为 node-uuid 没有返回任何值,因此调用环境被设置为匿名对象。
我 运行 使用 node-uuid 库遇到问题。我正在使用 browserify 构建,我发现尽管 运行 在支持加密 API 的现代浏览器中,它实际上并没有使用 crypto.getRandomValues 方法生成 运行多愁善感。
简答:
我们发现问题是由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
的值未定义。我们添加上面的配置后,_global
的值为window
,_global.crypto
的值为预期值。
原因是,当您配置 browserify-shim 时,我们告诉它 node-uuid 库会将变量 uuid
导出到调用环境中。在浏览器中,调用环境将为 window
,因此当它运行 node-uuid 的初始化时,它会设置调用环境为 window.
如果您不这样配置,那么 browserify-shim 认为 node-uuid 没有返回任何值,因此调用环境被设置为匿名对象。