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沒有返回任何值,所以調用環境被設置爲匿名對象。