降价 – 如何使用Nunjucks的partials / macros / includes with metalsmith-in-place?

我在我的markdown文件中重用模板代码时遇到了麻烦.

例如,我想拉入
vimeo链接的嵌入代码,并将
vimeo id传递给调用.

一个例子宏:

{% 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) }}

如果我直接在markdown文件中定义宏,这是有效的.但是我当然希望有一个带宏的全局文件,以便于维护.

我试图使用Nunjucks'{%import“macros.njk”作为宏%}. macros.njk将包含vimeoEmbed宏.
但不幸的是我不断收到错误:模板名称必须是一个字符串:undefined.

作为替代方案,我尝试使用{%include“vimeoEmbed.njk”%},但我得到相同的错误:模板名称必须是字符串:undefined.

由于Nujucks的包括和导入工作与metalmith-layouts一样好,这似乎特别适用于metalmith-in-place.

任何其他重复使用markdown文件和Nunjucks中的代码的解决方案也是受欢迎的.谢谢!

最佳答案 我自己想通了.

我的错误基本上是在metalmith-markdown插件之后运行metalmith-in-place. Markdown插件已经将引号转换为{{“some string”}}到{{& quot; some string& quot; }}.
我把它切换到原地,然后在Markdown之前运行.

与此同时,我还将metalsmith-in-in更新为2.0.0-beta.1.它现在依赖于JSTransformer,而不再是mergeate.js.
由于Nunjucks变压器似乎有一个issue与Nujucks包括和进口我也不得不从Nunjucks宏切换到过滤器.
所以我不完全确定这会解决最初的问题,但很可能.

点赞