对于Nunjucks,我使用throwOnUndefined
选项来查看在输出中使用未定义或null值的位置。
在我的代码结构中,我有一个主文件,并导入包含用于实际呈现输出的宏的文件。
我想在上报告错误,但错误总是在主文件上报告。无论是在我自己的代码中,还是在我使用例如nunjucks-cli时。
nunjucks-cli:示例
文件options.json
:
{
"throwOnUndefined": true,
}
文件test.njk
:
{% import "macro.njk" as doit %}
{{ doit.giveError("x") }}
文件macro.njk
,由于写入y
:的值而包含错误
{% macro giveError(x) %}
{{ y }}
{% endmacro %}
Nunjucks突击队:
nunjucks test.njk --path . --options options.json
错误输出:
Template render error: (C:Qnunjucks-errorreportingtest.njk) [Line 1, Column 17]
Template render error: (C:Qnunjucks-errorreportingtest.njk) [Line 2, Column 4]
attempted to output null or undefined value
两个错误都在test.njk
上报告。Line 1, Column 17
上的第一个错误,但在这两个文件上,第17列没有相关性。第二个错误是Line 2, Column 4
,它与在macro.njk
文件中写入{{ y }}
相匹配,但在test.njk
上报告。
我在自定义代码中得到了相同的行为。
有没有一种方法可以在正确的文件上获得正确的错误报告,因为我有文件导入文件,导入其他文件。。。
更新:
根据输入Lesha Ogonkov,我在options.json中添加了"dev": true
。这将产生以下输出:
Error: attempted to output null or undefined value
at new TemplateError (C:Qnunjucks-errorreportingnode_modulesnunjuckssrclib.js:89:17)
at Object.ensureDefined (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcruntime.js:242:11)
at Object.eval (eval at _compile (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcenvironment.js:631:18), <anonymous>:18:38)
at Object.giveError (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcruntime.js:131:17)
at Context.<anonymous> (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcruntime.js:259:23)
at Object.callWrap (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcruntime.js:273:14)
at eval (eval at _compile (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcenvironment.js:631:18), <anonymous>:13:88)
at C:Qnunjucks-errorreportingnode_modulesnunjuckssrcenvironment.js:613:9
at Template.root [as rootRenderFunc] (eval at _compile (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcenvironment.js:631:18), <anonymous>:29:1)
at Template.getExported (C:Qnunjucks-errorreportingnode_modulesnunjuckssrcenvironment.js:609:10) {
lineno: 2,
colno: 4,
firstUpdate: false,
Update: [Function: Update]
}
我仍然看不到与发生错误的文件的关系。
尝试在throwOnUndefined
旁边设置dev
标志。它是无证件的nunjucks功能,防止堆叠种族崩溃。