我在GruntJS脚本中遇到以下错误:
超出最大调用堆栈大小“
在我的grunt命令中调用节点标志--max-stack-size=
的正确语法是什么,这样我可以为堆栈预留更多的内存?
答案 0 :(得分:6)
除非您在GruntJS中进行一些非常高级的编程,否则我认为您可能已经注册了循环任务。
如果您将任务命名为与插件相同的名称,它将无限次运行:
grunt.registerTask('uglify', ['uglify'])
这导致任务调用自己。
为了验证你在做什么,使用--verbose
(或--v)命令运行grunt以查看正在运行的grunt。
例如,运行grunt uglify --v
并注意它运行的次数。通过将任务名称更改为其他名称,可以轻松修复此问题。
但是,如果您确定自己正在做什么,请使用--max-stack-size=10000
进行咕噜声
或者其他......
答案 1 :(得分:2)
使用grunt-cli
在本地安装npm install grunt-cli
,然后在本地调用:
node --max-stack-size=val ./node_modules/.bin/grunt
虽然可能因为无限递归而得到了这个错误,但应该修复。
答案 2 :(得分:1)
这应该适用于linux或mac:
node --stack-size=10000 `which grunt`
10000可以替换为您需要的任何尺寸。
我的mac和我最近一直在努力的ubuntu服务器上的默认值是984.
另一种选择是将其添加到您的.bashrc
,.bach_profile
或同等身份:
alias grunt='node --stack-size=10000 `which grunt`'
答案 3 :(得分:0)
当我通过grunt.task.run()
动态调用任务时,类似的问题发生在我身上。
似乎grunt的success
回调填充了NodeJs堆栈。
我对c:\Users\%UserName%\AppData\Roaming\npm\grunt.cmd
进行了手动编辑(在Windows上)。添加您的节点版本支持的参数,例如--stack_size=2000
(有关详细信息,请使用node -help
)。