【问题标题】:How to use Nunjucks' partials / macros / includes with metalsmith-in-place?如何将 Nunjucks 的部分/宏/包含与 metalsmith-in-place 一起使用?
【发布时间】:2016-11-12 11:07:06
【问题描述】:

我无法在我的 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" 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,因为 Nujucks 的 includeimportmetalsmith-layouts 配合得很好。

也欢迎任何其他在 markdown 文件和 Nunjucks 中重用代码的解决方案。谢谢!

【问题讨论】:

    标签: markdown nunjucks metalsmith


    【解决方案1】:

    我自己想通了。

    我的错误基本上是在metalsmith-markdown 插件之后运行metalsmith-in-place。 Markdown 插件已经将{{ "some string" }} 中的引号转换为{{ &amp;quot;some string&amp;quot; }}。 我切换它,以便在 Markdown 之前就地运行。

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

    【讨论】:

    • 您好!你是如何设法让金属匠和修女一起工作的?我已经尝试过layoutsin-place,但在我尝试过的大多数配置中,它们根本没有处理.nj 文件。可以分享一下你的配置吗?谢谢!
    • 确保使用 .njk.nunjucks 作为 Nunjucks 的扩展名。 JSTransformer 根据文件扩展名自动匹配转换器。看看this list 作为参考。
    • 是的,谢谢。我通过查看源代码已经弄清楚了。我实际上已经写了一篇关于这个主题的文章:medium.com/@slavafomin/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多