如何更改 NodeJS 中的堆栈大小限制?

How to change stack size limit in NodeJS?

在我的库中(JavaScript 中的方案)我有一个应该失败的测试,因为它计算 (!1000) 并且在实施 TCO(尾调用优化)时它应该通过。但是最近NodeJS可能增加了堆栈大小限制,因为测试通过意味着它没有失败。

有没有办法在 NodeJS 中缩小堆栈大小?所以我不需要增加阶乘函数的值来溢出堆栈。

编辑:请注意 GitHub 上讨论的 --stack-size 选项可能会使节点崩溃。我想要一个堆栈溢出错误,但对于小于 1000 的值。

您可以使用 --stack-size V8 选项(另请参阅 here)。

要查看默认大小,您可以勾选--v8-options:

$ node --v8-options | grep -B0 -A1 stack-size
  --stack-size (default size of stack region v8 is allowed to use (in kBytes))
        type: int  default: 984

(除了调用和解析 node --v8-options 之外,我不知道有什么方法可以以编程方式读取默认值或当前值。)

然后您可以使用该选项指定新的堆栈大小:

$ node --stack-size=512 index.js

您也可以使用 v8.setFlagsFromString:

从程序本身进行设置
const v8 = require('v8');
v8.setFlagsFromString('--stack-size=512');

请注意,可用的 V8 选项将来可能会在 node.js 中使用的较新版本的 V8 中发生变化。 (例如,我相信这个选项之前被称为 stack_size 带有下划线,但现在它是 stack-size 带有破折号。)您可以使用 v8flags package 包或以编程方式调用 node --v8-options如果该选项不再存在则引发错误,以便您可以调整测试。