渲染错误:RangeError:超出最大调用堆栈大小

时间:2013-10-31 15:12:47

标签: docpad

当我尝试渲染时,我的default.html.eco布局产生了以下错误:

RangeError:超出最大调用堆栈大小

我的docpad版本是: v6.54.2 ,导致它的具体行是:

<%- @getBlock('scripts').add(['/vendor/foundation.min.js',
'/vendor/audiolib.js','/vendor/freqfinder.js','/vendor/modernizr.js']).toHTML() %>

如果我删除它,我会得到一个干净的构建。

请注意,它上方的样式块可以很好地呈现:

<%- @getBlock("styles").add(['/vendor/foundation.css']).toHTML() %>

所以我决定尝试在脚本块中截断该列表并且它可以工作:

<%- @getBlock("scripts").add(['/vendor/foundation.min.js']).toHTML() %>

有关如何解决此问题的任何想法?如果我没有做错什么的话,我会提交一个bug - docpad的新手。

1 个答案:

答案 0 :(得分:2)

你的代码中有换行符吗?当我从这里复制粘贴到我的布局文件时,它失败了,但是如果我删除了'/vendor/foundation.min.js','/vendor/audiolib.js'之间的换行符,那么它会按预期编译。

或者,您也可以使用.add()这样的字符串:

<%- @getBlock('scripts').add('/vendor/foundation.min.js').add( '/vendor/audiolib.js').add('/vendor/freqfinder.js').add('/vendor/modernizr.js').toHTML() %>

这对我来说也很好。

以及相关说明,以防其他人遇到此错误但没有任何换行符:collection.add(null)现在会导致相同的错误消息。所以,如果你正在做这样的事情:

<%- @getBlock("scripts").add( @getDocument().get('scripts') ).toHTML() %>

如果您在每个页面上都没有scripts元数据字段,它将会死亡。

然而,修复非常简单:

<%- @getBlock("scripts").add( @getDocument().get('scripts') or [] ).toHTML() %>