truffle使用0.6.0~0.7.6版本solc编译时内存不足如何解决
该问题本质是Node.js 16.x版本与solc 0.6.0~0.7.6版本的JavaScript绑定包存在已知内存泄漏缺陷,编译阶段会无限制占用内存最终触发溢出,与合约代码本身无直接关联,可通过以下方案解决:
可行解决方案
- 调整Node进程内存上限
运行truffle命令前手动指定Node堆内存大小,将上限调整为4GB(可根据设备配置上调),对应命令:# macOS/Linux 环境 NODE_OPTIONS=--max-old-space-size=4096 truffle migrate # Windows 环境(CMD) set NODE_OPTIONS=--max-old-space-size=4096 truffle migrate # Windows 环境(PowerShell) $env:NODE_OPTIONS="--max-old-space-size=4096" truffle migrate - 降级Node.js版本
卸载当前Node.js 16.2.0,安装Node.js 14.x LTS版本(推荐14.19.3),该版本与Truffle 5.4.x、solc 0.6~0.7.x系列兼容性最优,可彻底解决该版本区间的内存溢出问题。 - 启用solc优化器并清除编译缓存
修改truffle-config.js中的编译器配置,开启编译优化减少内存占用:
配置完成后先执行module.exports = { compilers: { solc: { version: "^0.6.0", settings: { optimizer: { enabled: true, runs: 200 // 可根据业务需求调整数值 } } } } }truffle clean清除旧的编译缓存,再重新执行迁移操作。 - 使用原生solc二进制替代JS绑定版本
本地安装对应版本的原生solc编译器,在truffle-config.js中指定原生编译器路径,规避JS版本的内存泄漏问题:compilers: { solc: { version: "^0.6.0", path: "/usr/local/bin/solc" // 替换为本地solc的实际安装路径 } }
内容的提问来源于stack exchange,提问作者heyooo12
相关产品推荐
相关产品推荐

