使用 nunjucks 包括 Metalsmith-in-place 导致渲染错误
Using nunjucks includes with Metalsmith-in-place causing rendering error
我正在使用 Metalsmith 和 Nunjucks 创建静态网站。
我创建一个类似博客的网站没问题,这意味着创建一个布局,我可以使用 metalsmith-layout 插件在其中包装一些 markdown 内容。
但我想创建一些视图:
- 使用布局(使用 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 %}
我尝试使用 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 的问题。
我正在使用 Metalsmith 和 Nunjucks 创建静态网站。
我创建一个类似博客的网站没问题,这意味着创建一个布局,我可以使用 metalsmith-layout 插件在其中包装一些 markdown 内容。
但我想创建一些视图:
- 使用布局(使用 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 %}
我尝试使用 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 的问题。