您可以使用支持模板继承的语言(如 swig)结合 metalsmith-in-place 来创建多个内容区域。
如果不使用降价,您可以这样做:
src/index.swig
{% extends 'templates/default.swig' %}
{% block about %}
Content for about
{% endblock %}
{% block faq %}
Content for faq
{% endblock %}
模板/default.swig
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<section id="about">
{% block about %}{% endblock %}
</section>
<section id="faq">
{% block faq %}{% endblock %}
</section>
</body>
</html>
构建.js
/**
* Dependencies
*/
var filenames = require('metalsmith-filenames');
var inPlace = require('metalsmith-in-place');
var metalsmith = require('metalsmith');
/**
* Build
*/
metalsmith(__dirname)
// Process templates
.use(filenames())
.use(inPlace('swig'))
// Build site
.build(function(err){
if (err) throw err;
});
然后运行node build.js
。现在,如果您也想使用降价,这实际上是不可能的。Marked,metalsmith-markdown 的渲染器,会用<p>
s 包围你的内容,转义某些字符等等。这会使维护模板变得很麻烦,因为 metalsmith-markdown 可能会破坏 swig 标签。它可能仍然有效,但我绝对不会推荐它。
所以我推荐的是上面的设置。您将失去使用降价的优势,但会获得一些额外的组织选项。由您决定您喜欢哪个。