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

时间:2018-04-12 14:42:48

标签: nunjucks metalsmith

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

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

但我想创建一些观点:

  • 使用布局(使用front-matter或使用extends方法)
  • 使用一些手工制作的组件/部分/宏

例如,index.njk:

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

{% block content %}

Hello World!

{% include components/test1.njk %}

{% include components/test2.njk %}

{% include components/test3.njk %}

{% endblock %}

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,我对金属片的松弛有一些很好的答案和解释。

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

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

原因是src文件夹只应收集主要内容,所有nunjucks文件只会添加到此内容中。

然后,使用此配置,简单的.use(inplace())就足够了。如果目录与directory不同,则可以添加./layouts选项。

通过这个设置,这个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的问题。