gruntjs - 如何根据开发/构建上下文使用 Assemble 包含不同的内容部分?

标签 gruntjs handlebars.js assemble grunt-assemble

我已经跳进assemble/Grunt 尝试改进为我使用的 CMS 创建模板的工作流程。我想弄清楚的是:是否可以在开发时(即在“grunt watch”期间)在我的模板中使用 HTML 内容 block /部分内容,然后将其替换为我的 CMS 在最终的 HTML 输出(即当我执行“grunt build”时)。像下面这样吗?

<div id="content">
{{! if in dev context, include this partial }}
{{#if}}
  {{> body }}
{{! if in build context, include this partial }}
{{else}}
  {{> body-cms-tag }}
{{/if}}
</div>

如果处于开发/监视模式,则会输出

<div id="content">
  <h1>Test Headline</h1>
  <p>This is just test content.</p>
</div<

但在构建模式下,会输出

<div id="content">
  <?php echo $mContext['bodyElements']; ?>
</div>

这可能吗,无论是使用 Handlebars 语法、Assemble 助手还是 Grunt 任务(类似于 grunt-usemin?)

最佳答案

您可以在数据或汇编选项中添加标志,并在 if 语句中检查该标志的值:

Gruntfile.js

assemble: {
  options: {
    production: false
  },
  files: { ... }
}

页面.hbs

<div id="content">
{{! if in dev context, include this partial }}
{{#if production}}
  {{> body }}
{{! if in build context, include this partial }}
{{else}}
  {{> body-cms-tag }}
{{/if}}
</div>

目前,如果您想在某些帮助程序或部分中获取 生产 标志来更改上下文级别,则必须使用类似 ../生产 这可能会很痛苦。不过,Handlebars.js 有一个功能,该版本(希望很快)将允许您从任何级别执行 @root.product。这已被合并,但尚未发布。当它发布时,我们将更新到该版本。

希望这有帮助。

关于gruntjs - 如何根据开发/构建上下文使用 Assemble 包含不同的内容部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521337/

相关文章:

node.js - 使用 Q promises 的 node.js 项目的代码覆盖率

javascript - 如何设置 Handlebars 布局目录?

javascript - 渲染模板的部分内容

javascript - 无法使用 handlebars 和 assemblefile.js 呈现部分

javascript - NodeJs : external javascript with dependencies

使用 Maven 的 JavaScript 缩小工作流

javascript - Grunt 将 Angular ui 路由器模板连接到一个文件中

css - 如何使用 cssmin 重写缩小的 css 中的相对 url?

javascript - 在 Handlebars 中调用函数原型(prototype)

handlebars.js - 在页面集合循环中获取页面 URL