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

Jak*_*ake 6 templates node.js 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'
}));
Run Code Online (Sandbox Code Playgroud)

输出为

Template:
Partial A: A is for Apple
Partial B: B is for Ball
Partial C: C is for Cat
Run Code Online (Sandbox Code Playgroud)

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

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

Pau*_*l S 1

执行编译的模板后,任何已使用的部分都会成为 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
Run Code Online (Sandbox Code Playgroud)