Pug/Jade在给定模板中获取所有变量

5

针对给定的Jade/Pug模板,我希望能够获取到模板中出现的所有变量列表。

我的动机如下:在我的软件中,不同的模板用于生成一些HTML片段。根据给定的上下文(即为某些变量赋值),我想建议仅使用那些可以分配模板中所有变量的模板。

例如:对于像这样的模板myTemplate:

html
    head
        title= myTitle
    body
        h1 #{value.headline}
        p #{paragraph.text}

我希望能够得到如下输出结果:
var variableNames = extractVariableNamesFromTemplate('myTemplate');
// variableNames = [ 'myTitle', 'value.headline', 'paragraph.text' ]

是否有现成的可用解决方案?最好是包括所有语言特定功能,例如包含、扩展等。

1个回答

2
这不是你问题的完整答案,而是一个起点。从调试pug代码中,我注意到你可能可以在模板“编译”的某个步骤中“挂钩”插件到代码中。看这里here。 似乎在编译的各个步骤中,你可以访问模板中存在的不同节点。
你还可以看一下this,它似乎几乎提供了你所寻找的功能。
如果你做了类似的事情,
var lex = require('pug-lexer');

var filename = 'template.pug';
var src = `
html
    head
        title= myTitle
    body
        h1 #{value.headline}
        p #{paragraph.text}`;

var tokens = lex(src, {filename});

tokens的内容是一个不同令牌的数组,其中类型为"code"或"interpolate-code"的令牌似乎是不同的变量。

希望这可以帮助到您。


谢谢,Mathieu!这看起来非常有价值。它仍需要额外的逻辑,例如条件和变量赋值,但这是朝着正确方向迈出的一大步。附言:如果在接下来的两天内我没有得到更完整的解决方案,那么奖励将归您! - qqilihq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接