首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nunjucks包括在现场使用Metalsmith,从而导致呈现错误。

使用nunjucks包括在现场使用Metalsmith,从而导致呈现错误。
EN

Stack Overflow用户
提问于 2018-04-12 14:42:48
回答 1查看 300关注 0票数 0

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

我没有问题创建一个类似博客的网站,意思是创建一个布局,在其中我可以包装一些标记内容,使用金属匠布局插件。

但我想提出一些意见:

  • 使用布局(前面的内容或扩展的方法)
  • 使用一些手工制作的组件/部分/宏。

例如,一个index.njk:

代码语言:javascript
复制
{% extends "layouts/base.njk" %}

{% block content %}

Hello World!

{% include components/test1.njk %}

{% include components/test2.njk %}

{% include components/test3.njk %}

{% endblock %}

我试着用金属原位插件:

代码语言:javascript
复制
.use(inplace({
    engineOptions: {
        path: __dirname + '/src/templating'
    }
})

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

似乎inplace()不能正确地呈现包含..。

知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 15:59:05

好吧,我对金属匠的松懈有了很好的回答和解释。

首先,文件夹结构应该类似于:

代码语言:javascript
复制
layouts/
    base.njk
components/
    test.njk
partials/
    head.njk
src/
    index.njk

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

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

有了这个设置,这个index.njk就可以正常工作了:

代码语言:javascript
复制
{% extends "./layouts/base.njk" %}

{% block content %}

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

{% endblock %}

base.njk布局为:

代码语言:javascript
复制
<!doctype html>
<html class="" lang="">

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

  <body>

    {% block content %}{% endblock %}

  </body>

</html>

但是,正如有人告诉我的那样,要小心:

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

希望我能很好地解释和理解^^

非常感谢“伊斯梅”花了些时间帮我解决金属匠的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49799507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档