テンプレートの継承をサポートする言語 (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>
build.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
ます。マークダウンも使用したい場合、これは実際には不可能です。metalsmith-markdown のレンダラーである Marked は、コンテンツを<p>
s で囲んだり、特定の文字をエスケープしたりします。これにより、metalsmith-markdown が swig タグを壊す可能性があるため、テンプレートの維持が面倒になります。それでもうまくいくかもしれませんが、私は絶対にお勧めしません。
というわけで、上記の設定がおすすめです。マークダウンを使用する利点は失われますが、いくつかの追加の編成オプションが得られます。どちらを好むかはあなた次第です。