Как использовать партиалы / макросы / включения Nunjucks с кузнецом на месте?

У меня возникают проблемы с повторным использованием кода шаблона в моих файлах уценки. Например, я хотел бы получить код встраивания для ссылок vimeo и просто передать идентификатор vimeo в вызов.

Один пример макроса:

{% macro vimeoEmbed(id) %}
  <iframe src="https://player.vimeo.com/video/{{ id }}?title=0&byline=0&portrait=0" width="300" height="169" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
{% endmacro %}

Для использования следующим образом:

{{ vimeoEmbed(120394634) }}

Это работает, если я определяю макрос напрямую в файле уценки. Но, конечно, я хотел бы иметь глобальный файл с макросом для облегчения обслуживания.

Я пытался использовать Nunjucks {% import "macros.njk" as macros %}. macros.njk будет содержать макрос vimeoEmbed.
Но, к сожалению, я продолжаю получать Error: template names must be a string: undefined.

В качестве альтернативы я пытался использовать {% include "vimeoEmbed.njk" %}, но получаю тот же Error: template names must be a string: undefined.


Кажется, это характерно для metalsmith-in-place, поскольку include и import от Nujucks отлично работают с metalsmith-layouts.

Приветствуется любое другое решение повторного использования кода в файлах уценки и Nunjucks. Спасибо!


person Js.    schedule 16.08.2016    source источник


Ответы (1)


Я понял это сам.

Моя ошибка заключалась в том, что я запускал metalsmith-in-place после плагина metalsmith-markdown. Плагин Markdown уже преобразовал кавычки, например, в {{ "some string" }} в {{ &quot;some string&quot; }}. Я переключаю это так, что на месте выполняется перед Markdown.

Тем временем я также обновил metalsmith-in-place до 2.0.0-beta.1. Теперь он полагается на JSTTransformer, а не на консолидацию.js. Поскольку у преобразователя Nunjucks, похоже, есть проблема с включением и импортом Nujucks, я также пришлось переключиться с макросов Nunjucks на фильтры. Так что я не совсем уверен, что это решит первоначальную проблему, но вполне вероятно.

person Js.    schedule 12.11.2016
comment
Привет! Как вам удалось заставить кузнецов и нунджаков работать вместе? Я пробовал и layouts, и in-place, но они вообще не обрабатывают файлы .nj в большинстве конфигураций, которые я пробовал. Не могли бы вы поделиться своей конфигурацией? Спасибо! - person Slava Fomin II; 18.11.2017
comment
Обязательно используйте .njk или .nunjucks в качестве расширения для Nunjucks. JSTTransformer автоматически сопоставляет преобразователи в зависимости от расширений файлов. Взгляните на этот список в качестве справки. - person Js.; 04.12.2017
comment
Да спасибо. Я понял это, просматривая исходный код. На самом деле я написал статью на эту тему: medium. com/@slavafomin/ - person Slava Fomin II; 05.12.2017