handlebars.js 中缺少(或“可选”)表达式?

gra*_*amb 5 javascript node.js handlebars.js

我正在节点中编写构建脚本。简而言之,该脚本执行以下操作:

  • 提示用户输入信息(项目名称、描述等)
  • 克隆模板 git 存储库
  • 从模板名称重命名文件(例如 com_foo_template.js --> com_foo_myproject.js)
  • 根据步骤 1 中的输入替换某些模板文件中的标记

我正在尝试使用 Handlebars.js 进行令牌替换步骤。

还有第二阶段的部署,其中也涉及代币替换。这是我的问题的根源。

在某些文件中,其中包含的所有令牌都将在初始化期间被替换(克隆/重命名/替换部分)。在其他文件中,只有其中一些令牌会在初始化时被替换,而其他令牌在部署步骤运行之前不会被替换(例如部署日期、git 提交哈希等)。考虑以下文件:

<zimletConfig name="{{name}}" version="{{deploy_version}}">
  <global>
    <property name="allowedDomains">*.foo.com</property>
    <property name="gitCommit">{{gitcommit}}</property>
    <property name="deployDate">{{deploydate}}</property>
  </global>
</zimletConfig>
Run Code Online (Sandbox Code Playgroud)

在此文件中,只有 {{name}} 应在初始化时替换;其他令牌应仅在部署时替换。但是,当我运行 init 步骤时,部署时令牌将替换为空字符串:

<zimletConfig name="com_foo_myproject" version="">
  <global>
    <property name="allowedDomains">*.foo.com</property>
    <property name="gitCommit"></property>
    <property name="deployDate"></property>
  </global>
</zimletConfig>
Run Code Online (Sandbox Code Playgroud)

如果传入的对象中不存在标记,是否有办法让把手不替换标记?

gra*_*amb 2

我想我有一个解决方案;我实现了一个helperMissing助手,它似乎像我想象的那样工作。

handlebars.registerHelper('helperMissing', function(token) {
    return '{{'+token+'}}';
Run Code Online (Sandbox Code Playgroud)

});

我很好奇这是否是解决问题的最佳方法。