获取车把模板编译中实际使用的部分列表

时间:2016-11-06 02:40:09

标签: node.js templates handlebars.js

我试图在手柄模板编译过程中提取部分实际的列表。如果我能以某种方式在实际编译之前获得该信息,那将更加理想。

下面是一个简单的把手编制方式的例子:

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的事实。

我在此尝试避免的是编写自己的正则表达式来解析模板,然后手动构建该列表。如果我能坚持实际用于车把的机制以避免潜在的未来破损,我更愿意。

1 个答案:

答案 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