我正在使用Metalsmith和Nunjucks创建一个静态网站。
创建类似博客的网站没有问题,这意味着使用metalsmith-layout插件创建一个可以包装一些降价内容的布局。
但我想创建一些观点:
例如,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()无法正确呈现包含...
有什么想法吗?
答案 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的问题。