Javascript
使用 solc 編譯非常大的文件時如何修復 Javascript 堆棧溢出?
如果我用 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程式碼分解為多個文件,一旦可移植,這將更容易。