如何强制缓冲区中的TYPED_ARRAY_SUPPORT为反应本机?

时间:2018-02-19 20:29:11

标签: react-native shim

我使用了大量在React Native中使用节点模块的软件包。我已经设法通过在其他节点模块加载之前填充我需要的关键模块来使它们全部运行。我收集的关键模块是缓冲区。

但是,我在缓冲区的代码中发现了一些错误。将它称为错误可能是不合适的,因为缓冲区从未打算在反应本机运行时执行。

切片时,缓冲区检查以查看是否支持类型化数组。如果是,则使用typedArray.subarray方法执行切片。如果没有,请手动执行我们自己的切片。

使用此代码段

进行说明
if (Buffer.TYPED_ARRAY_SUPPORT) {
    newBuf = Buffer._augment(this.subarray(start, end))
} else {
    var sliceLen = end - start
    newBuf = new Buffer(sliceLen, undefined)
    for (var i = 0; i < sliceLen; i++) {
        newBuf[i] = this[i + start]
    }
}

问题是,typed arrays are not supported in react native。不知何故TYPED_ARRAY_SUPPORT在执行时为真。

我注意到,如果在调试器中我在全局命名空间中将TYPED_ARRAY_SUPPORT更改为true(根据global.TYPED_ARRAY_SUPPORT定义设置了Buffer.TYPED_ARRAY_SUPPORT),我的代码将执行得非常好。

如何将global.TYPED_ARRAY_SUPPORT = false填入全局命名空间?出于某种原因,我试图将其填充到不会使其一直到缓冲区,而其他模块被填充。

1 个答案:

答案 0 :(得分:1)

我试图用它来解决缓冲区并没有最终起作用,但我确实想出如何将TYPED_ARRAY_SUPPORT注入全局命名空间,以防任何人需要知道。

只需将global.Buffer.TYPED_ARRAY_SUPPORT = false;放入global.js并尽可能早地在应用程序中填充你的global.js,以确保它在其他任何内容之前执行。

这是一个类似的问题,扩展了这个程序

Can't find variable: Buffer