选择“new Buffer(str)”和“Buffer.from(str)”

时间:2017-02-08 10:42:18

标签: node.js buffer compatibility backwards-compatibility

根据the docs,不推荐使用new Buffer(str),人们应该使用Buffer.from(str)。另一方面,Buffer.from在旧版本的节点中不可用。根据{{​​3}},它已添加到节点5.10.0中。

所以我假设我可以简单地使用像

这样的代码
buf = Buffer.from ? Buffer.from(str) : new Buffer(str);

以避免弃用警告,同时保持与旧版本节点的兼容性。事实证明,这并不像预期的那样有效。某些旧版本的节点似乎确实有from方法,但是一个抛出异常的不兼容方法:

TypeError: this is not a typed array.
    at Function.from (native)

那我该如何选择合适的版本呢?我应该以某种方式测试process.version吗?或者是否有一些更清洁的解决方案可能更适合其他引擎与节点兼容但不相同的可能性?

1 个答案:

答案 0 :(得分:4)

较新的Buffer API为backported to v4.x in v4.5.0。您在之前的版本中看到的Buffer.from()Uint8Array.from(),这不是一回事。

更好的API测试可能会检查是否存在Buffer.allocUnsafe()