Javascript

使用 solc 編譯非常大的文件時如何修復 Javascript 堆棧溢出?

  • June 16, 2019

如果我用 solc 編譯一個非常大的文件,堆棧就會溢出。這在 node 中最常發生,因為預設堆棧只有 984kbytes,這很奇怪,這是 1990 年代程序的預期,除了 node 不是 1990 年代。

這是你得到的錯誤: not ok 1 RangeError: Maximum call stack size exceeded

很可能是 javascript 包裝器 solc 正在使用具有 O(n) 堆棧行為,例如遞歸函式。

謝謝你!

結束了: node --stack-size=4096 .\node_modules\truffle\build\cli.bundled.js compile

而不是truffle compile(在查看之後node_modules/.bin/truffle)。

編輯:在 Ubuntu 上這也有效:node --stack-size=4096 node_modules/.bin/truffle compile

這可以從命令行工作,但非常尷尬:

alias node='node --stack-size=4096'

這很尷尬,因為您必須在呼叫節點的任何地方指定堆棧大小,並且在大多數係統上,您不能將選項放在 shebang 中。例如,任何節點實用程序(如 mocha 或磁帶)都不會按預期輕鬆工作。

您可以在路徑中覆蓋“節點”,但這不是很便攜,您必須記住在您的生產以及開發和登台環境中執行此操作。

如果它是一個環境變數,但節點不支持它會很好。

import另一種選擇是將您的solidity程式碼分解為多個文件,一旦可移植,這將更容易。

引用自:https://ethereum.stackexchange.com/questions/1403