当前位置: 首页 > 面试题库 >

找不到变量:缓冲区

施海
2023-03-14
问题内容

我试图在我的react-
native应用程序中使用节点模块,并且在这里采用ReactNativify方法。

我现在已经全部设置好了,我可以很好地加载加密包了。但是,当我添加eth-
lightwallet时,
事情变得很奇怪。

自从我在其中添加该软件包以来,npm一直没有安装任何依赖项。意味着我必须手动添加它们。每次我安装某种与eth-
lightwallet相关的依赖项时,都会卸载该模块。尽管乏味和烦人,但我希望它能为我当前的问题提供启示。

现在,我遇到了一个Can't find variable: Buffer正在标准库中的util文件夹中抛出的。我看了一下代码,它正在从全局名称空间访问Buffer。问题是,我正在将Buffer导入到全局名称空间中。这是我的global.js

// Inject node globals into React Native global scope.
global.Buffer = require('buffer').Buffer;
global.process = require('process');
global.process.env.NODE_ENV = __DEV__ ? 'development' : 'production';

// Needed so that 'stream-http' chooses the right default protocol.
global.location = {
    protocol: 'file:',
};

// Don't do this in production. You're going to want to patch in
// https://github.com/mvayngrib/react-native-randombytes or similar.
global.crypto = {
    getRandomValues(byteArray) {
        for (let i = 0; i < byteArray.length; i++) {
            byteArray[i] = Math.floor(256 * Math.random());
        }
    },
};

我的猜测是在加载此全局变量之前正在评估标准库,因此会引发错误。


问题答案:

回到这个问题上,以防万一有人卡住。解决方法是从根本上尝试在不同时间填充不同的包装以更改加载顺序。

当TYPED_ARRAY_SUPPORT被不同地对待并且Buffer更依赖于它时,我们尝试回到另一个版本。在旧版本中,我们尝试了许多不同的方法,最终放弃了,并通过将缓冲区更新到最新版本来回溯,最终一切正常。

我的意思是说,我们不确定如何解决它,但这是通过随机更改装载顺序直到幸运为止。我知道这不是一个很好的答案,但是我可以为这个问题提供最好的答案。

这就是我们的global.js最后的样子

// Inject node globals into React Native global scope.
// Required for crypto functionality for bitcoinjs-lib, web3, etc.

global.Buffer = require('buffer').Buffer;
//global.Buffer.TYPED_ARRAY_SUPPORT = false;

global.process = require('process');
global.process.env.NODE_ENV = __DEV__ ? 'development' : 'production';

var getRandomValues = function(byteArray) {
  var bytes = crypto.rng.randomBytes(byteArray.length);
  for (let i = 0; i < byteArray.length; i++) {
    byteArray[i] = bytes[i];
  }
};
// "But Zach, aren't you just doing the same thing twice?"
// Yes. Initializing the crypto-browserify module eventually requires
// crypto.getRandomValues to exist, so we must add it here once.
// However, crypto-browserify does not support getRandomValues, so we
// must re-add it after loading the module.
global.crypto = { getRandomValues };
global.crypto.rng = require('react-native-randombytes');
global.crypto = require('crypto');
global.crypto.getRandomValues = getRandomValues;
global.crypto.rng = require('react-native-randombytes');
crypto.rng.seedSJCL();

// Needed so that 'stream-http' chooses the right default protocol.
global.location = {
  protocol: 'file:'
};


 类似资料:
  • 我正在尝试将另一个类的布尔变量调用到包含数组列表的类。下面方法的目的是将学生添加到团队中,如果学生不到一定年龄(例如18岁),他们将获得折扣。 以下是学生是否是大三学生的布尔结果代码: arraylist类包含一个方法sighUp(),该方法将学生添加到团队列表中。如果学生是大三学生,他们可以享受折扣: 我一直得到的错误是“isJunior”是一个找不到的变量。我试图从包含布尔变量的学生类中调用此

  • 问题内容: 我正在尝试使用TypeScript在NodeJS中进行base64编码。 以下代码在JavaScript中可以正常工作。 当我在TypeScript中编写相同的内容并进行编译时,我得到Buffer is not found错误。 有人可以帮我在TypeScript中做同样的事情。 问题答案: 在顶部添加以下行: 它应该编译没有错误。 使用内置于库或其他全局对象中的节点需要声明,您可以像

  • 问题内容: 我有一个关于在Grunt上使用茉莉花的问题。我不断出错 ReferenceError:找不到变量:require at 每当我运行茉莉花测试时。这是我的Gruntfile.js的茉莉花条目: 我可以在没有需求的情况下运行虚拟测试,但是像这样在测试中包含需求时,会出现需求错误。 问题答案: 我有同样的问题。只需安装此节点软件包并将此行添加到您的Gruntfile中,require应该重新

  • 所以,我试图学习一些Spring MVC,我尝试的第一个教程有一个和JSP中的一个。 我的控制器很简单: 当我运行代码时,它不工作,所以我开始添加到JSP。 我的身体里有这个: 我的输出源如下所示: 我期望给我空字符串,以及中的null。 不应该搜索requestScope并找到它吗? 不应该与 <代码> 这是怎么回事,为什么没有找到属性? 我知道我可以继续使用${requestScope.pri

  • 我是新人。每当我试图构建并运行这段代码时,都会出现这条消息。 下面是 XML 代码: 下面是Java代码: /***重要事项:在下面添加您的包裹。包名称可以在项目的AndroidManifest中找到。xml文件。*这是我们的示例使用的包名称:**packagecom.example.android。justjava;**/ 导入Android。R;导入Android捆绑包;import andr