使用 nunjucks 包括 Metalsmith-in-place 导致渲染错误

Using nunjucks includes with Metalsmith-in-place causing rendering error

我正在使用 Metalsmith 和 Nunjucks 创建静态网站。

我创建一个类似博客的网站没问题,这意味着创建一个布局,我可以使用 metalsmith-layout 插件在其中包装一些 markdown 内容。

但我想创建一些视图:

例如,一个 index.njk :

{% extends "layouts/base.njk" %}

{% block content %}

Hello World!

{% include components/test1.njk %}

{% include components/test2.njk %}

{% include components/test3.njk %}

{% endblock %}

我尝试使用 metalsmith-in-place 插件:

.use(inplace({
    engineOptions: {
        path: __dirname + '/src/templating'
    }
})

但是我有一个错误:The Transform "nunjucks" does not support rendering synchronously

inplace() 似乎无法正确呈现包含...

有什么想法吗?

好的,我对 metalsmith slack 有一些很好的回答和解释。

首先,文件夹结构应该是这样的:

layouts/
    base.njk
components/
    test.njk
partials/
    head.njk
src/
    index.njk

原因是src文件夹应该只收集主要内容,所有nunjucks文件只是添加到这个内容。

那么,这样配置,一个简单的.use(inplace())就够了。如果目录不同于 ./layouts.

,则可以添加 directory 选项

通过此设置,此 index.njk 工作正常:

{% extends "./layouts/base.njk" %}

{% block content %}

Hello World!
{% include './components/test.njk' %}

{% endblock %}

base.njk 布局为:

<!doctype html>
<html class="" lang="">

  {% include '../partials/head.njk' %}

  <body>

    {% block content %}{% endblock %}

  </body>

</html>

不过要小心,有人告诉我:

  • src 文件夹中的文件在 metalsmith 中进行了转换 文件对象,因此从那里读取,意味着在内存中和 不是直接从磁盘。意思是nunjucks无法解析 此文件夹内的相对路径,这就是为什么包含在 index.njk 有一个绝对路径:'./components/test.njk'
  • src文件夹外的文件在 metalsmith 文件对象,因此直接从磁盘读取。在 在这种情况下,nunjucks 可以解析相对路径,这就是 include 的原因 有这么一条路'../partials/head.njk'

希望我解释清楚,看懂了^^

非常感谢 "ismay" 抽出时间来帮助我解决 Metalsmith 的问题。