You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Handlebars.js结合JS模板字符串生成代码时出现编译错误

解决Handlebars与JS模板字符串的语法冲突问题

你遇到的是Handlebars语法({{{无转义输出)与JS模板字符串(${{)的解析冲突,导致语法报错。以下两种方案可以解决问题,且不会违反lint规则:

方案1:临时切换Handlebars分隔符

Handlebars支持临时切换表达式分隔符,避开与JS模板字符串的冲突。修改模板中的对应部分:

{{#each items}}
const thing{{this}} = new Thing({
  someProperty: {{=<% %>=}}`${<%this%>Name}`{{=<% %>=}}
});
{{/each}}
  • {{=<% %>=}}:将Handlebars的表达式分隔符临时改为<% %>
  • 切换后,<%this%>作为Handlebars表达式输出当前循环项(如one),${和}被视为字面量
  • 最后用{{=<% %>=}}将分隔符切回默认的{{ }}

编译后会正确输出:

const thingone = new Thing({
  someProperty: `${oneName}`
});

方案2:注册自定义Helper拼接变量名

在Plop配置中注册一个自定义Helper,用来生成完整的变量名(如oneName),避免直接在模板中拼接导致的语法冲突。

  1. 在Plop的配置文件中添加Helper:
plop.setHelper('getVarName', function(item) {
  return `${item}Name`;
});
  1. 修改模板中的对应部分:
{{#each items}}
const thing{{this}} = new Thing({
  someProperty: `${{{getVarName this}}}`
});
{{/each}}
  • {{{getVarName this}}}:调用自定义Helper生成变量名,{{{确保无转义输出(这里输出纯字符串,用{{也可)
  • 编译后同样会生成符合要求的${oneName}格式

为什么原写法报错?

原模板中的${{{this}}Name}会被Handlebars解析为:

  • 把前三个{{{识别为无转义表达式的开头,期望以}}结束
  • 但后面紧跟的Name}打破了解析规则,导致抛出语法错误

这两种方案都能完美解决冲突,且输出结果符合你的需求,同时不会引入违反lint规则的空格。

内容的提问来源于stack exchange,提问作者stetson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:10:29