2016-11-09 70 views
3

对于给定的Jade/Pug模板,我希望获得模板中发生的所有变量的列表。Pug/Jade获取给定模板中的所有变量

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

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

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

我想获得一些像这样的输出:

var variableNames = extractVariableNamesFromTemplate('myTemplate'); 
// variableNames = [ 'myTitle', 'value.headline', 'paragraph.text' ] 

是否有可用的东西随时可以使用?最好是考虑所有特定语言特征的解决方案,例如包括,扩展等。

回答

1

这不是对您的问题的完整解答,而是更多的出发点。从调试帕格代码,我已经注意到,你可能可以在模板“编译”的代码步骤之一中“钩”一个插件。看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}); 

令牌的内容是有多种不同的令牌的数组,一个是类型的“代码”或“插码”似乎是有多种不同的变量。

希望这会有帮助

+0

谢谢Mathieu!这看起来非常有价值。它仍然需要额外的逻辑,例如用于条件和变量赋值,但这是迈向正确方向的一大步。 PS:如果在接下来的两天内我不能得到更完整的解决方案,赏金就是你的! – qqilihq

相关问题