我试图在手柄模板编译过程中提取部分实际的列表。如果我能以某种方式在实际编译之前获得该信息,那将更加理想。
下面是一个简单的把手编制方式的例子:
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的事实。
我在此尝试避免的是编写自己的正则表达式来解析模板,然后手动构建该列表。如果我能坚持实际用于车把的机制以避免潜在的未来破损,我更愿意。
答案 0 :(得分:0)
执行编译的模板后,已使用的任何局部都将成为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