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

如何在JavaScript Handlebars中转义{{}}?文件模板处理求助

解决Handlebars编译时保留指定{{变量}}不被替换的问题

问题场景

输入文件my.txt内容:

name={{applicationName}}
env=app/{{env}}/{{applicationName}}

通过Handlebars编译替换applicationName为myFirstApp时,希望保留{{env}}不被解析,预期输出:

name=myFirstApp
env=app/{{env}}/myFirstApp

但实际得到错误输出:

name=myFirstApp
env=myFirstApp//app

使用的编译代码:

readContent = fs.readFileSync(`${__dirname}/../my.txt`, 'utf8')
handlebarsTemplate = Handlebars.compile(readContent)
const output = handlebarsTemplate({
  applicationName: 'myFirstApp'
})
fs.writeFileSync(`newFile.txt`, output, 'utf8')

问题原因

Handlebars会将所有{{xxx}}格式的内容视为模板变量,尝试从传入的上下文对象中查找对应值。由于上下文里未提供env属性,{{env}}会被解析为空字符串,导致原路径结构错乱。

解决方案

方法1:修改原模板文件,使用Handlebars转义语法

Handlebars支持用四个大括号{{{{}}}}来转义,编译后会输出两个大括号的{{}}。将my.txt中的{{env}}替换为{{{{env}}}}:

name={{applicationName}}
env=app/{{{{env}}}}/{{applicationName}}

再运行原编译代码,即可得到预期输出。

方法2:编译前动态处理模板内容(无需修改原文件)

如果无法修改原my.txt文件,可以在读取内容后,先将{{env}}替换为{{{{env}}}},再进行编译:

const readContent = fs.readFileSync(`${__dirname}/../my.txt`, 'utf8');
// 全局替换{{env}}为转义后的格式
const processedContent = readContent.replace(/{{env}}/g, '{{{{env}}}}');
const handlebarsTemplate = Handlebars.compile(processedContent);
const output = handlebarsTemplate({
  applicationName: 'myFirstApp'
});
fs.writeFileSync(`newFile.txt`, output, 'utf8');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:04