Как включить различные части содержимого в Assemble на основе контекста dev/build?

Я приступил к сборке/Grunt, чтобы попытаться улучшить свой рабочий процесс для создания шаблонов для CMS, которую я использую. Что я пытаюсь выяснить: возможно ли использовать блок / часть содержимого HTML в моем шаблоне во время разработки (т. Е. Во время "grunt watch"), но затем заменить это тегом include, который требуется моей 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>

который, если в режиме Dev/ Watch, будет выводить

<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?)

1 ответ

Решение

Вы можете добавить флаг в ваши данные или собрать параметры и проверить значение этого флага в вашем if заявление:

Gruntfile.js

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

page.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>

В настоящее время, если вы хотите добраться до этого production флаг внутри некоторого помощника или частичного, который изменяет уровень контекста, вы должны будете использовать что-то вроде ../production которая может быть болью. Тем не менее, Handlebars.js имеет функцию, которая будет в версии (надеюсь, скоро), которая позволит вам сделать @root.production с любого уровня. Это было объединено, но еще не выпущено. Когда он выйдет, мы будем обновляться до этой версии.

Надеюсь это поможет.

Другие вопросы по тегам