gpt4 book ai didi

node.js - 获取 Handlebars 模板编译中实际使用的部分列表

转载 作者:行者123 更新时间:2023-12-03 12:11:59 26 4
gpt4 key购买 nike

我正在尝试提取在 Handlebars 模板编译期间实际使用的部分列表。如果我能在实际编译之前以某种方式获得该信息,那就更理想了。

下面是一个简单的 Handlebars 示例,它以您期望的方式编译:

var handlebars = require('handlebars');

var template = `
Template: {{>a}}
`;

handlebars.registerPartial('a', `
Partial A: {{A}} {{>b}}
`);
handlebars.registerPartial('b', `
Partial B: {{B}} {{>c}}
`);
handlebars.registerPartial('c', `
Partial C: {{C}}
`);
handlebars.registerPartial('d', `
Partial D: {{D}}
`);

var compiled = handlebars.compile(template);

console.log(compiled({
'A' : 'A is for Apple',
'B' : 'B is for Ball',
'C' : 'C is for Cat',
'D' : 'Not used'
}));

输出为
Template:
Partial A: A is for Apple
Partial B: B is for Ball
Partial C: C is for Cat

我想要一个列表,它返回在编译期间实际使用了部分 A、B 和 C 的事实。

我在这里试图避免的是编写自己的正则表达式来解析模板,然后手动构建该列表。我更愿意坚持使用 Handlebars 中实际使用的机制,以避免将来可能发生的损坏。

最佳答案

执行编译后的模板后,任何已使用的部分都将成为 Handlebars 对象中的函数。未使用的部分将保留字符串。

var handlebars = require('handlebars')

var template = `
Template: {{>a}}
`

handlebars.registerPartial('a', `
Partial A: {{A}} {{>b}}
`)
handlebars.registerPartial('b', `
Partial B: {{B}} {{>c}}
`)
handlebars.registerPartial('c', `
Partial C: {{C}}
`)
handlebars.registerPartial('d', `
Partial D: {{D}}
`)

var compiled = handlebars.compile(template)

compiled({})

var used = []
var unused = []

for (var name in handlebars.partials) {
var partial = handlebars.partials[name]
if (typeof partial === 'function') {
used.push(name)
} else {
unused.push(name)
}
}

console.log('Used partials: ' + used) // a,b,c

console.log('Unused partials: ' + unused) // d

关于node.js - 获取 Handlebars 模板编译中实际使用的部分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com