Table of contents
- metalsmith-drafts
- metalsmith-autoprefixer
- metalsmith-sass
- metalsmith-less
- metalsmith-assets
- metalsmith-markdown-remarkable
- metalsmith-asciidoc
- metalsmith-prism
- metalsmith-jade
- metalsmith-layouts
- metalsmith-permalinks
- metalsmith-mapsite
- metalsmith-watch
metalsmith-drafts
ドラフト(下書き)を管理するプラグインです。下書き状態としたいコンテンツファイルの先頭 (YAML front-matter) に draft: true と記述すると、パイプラインから除去されます。
ただし、この方法だと下書き状態のまま生成物を確認することができません。
実例として development 環境では下書きも生成するが production 環境では除去したい、
を実現するには以下のようにします。
$ export NODE_ENV=development
function draftsInDev() {
if (process.env.NODE_ENV !== 'development') {
return drafts();
} else {
return function(){};
}
}
.use(draftsInDev())
export の管理には npm パッケージの dotenv を使うと便利です。
metalsmith-autoprefixer
Autoprefixer プラグインです。 CSS ファイルを対象に、ベンダープレフィックスを自動で付加します。 Sass や Less プラグインを使っている場合には、その後に呼び出します。
- postcss/autoprefixer
Parse CSS and add vendor prefixes to rules by Can I Use
metalsmith-sass
Sass プラグインです。拡張子.sassまたは.scssファイルを CSS に変換します。
ただし、Sass のソースファイルや配置ディレクトリをプラグインに渡す必要はありません。
Metalsmith の流儀として、すべてのソースファイルがプラグインの処理対象となるからです。
- Sass: Syntactically Awesome Style Sheets
Sass 公式サイト
!! Incompatible with Node v6.x
2016/06 現在、"node-sass": "^3.1.2" に依存しているため Node v6.x では動作しません。
Fork してなんとかするか、 Sass を諦めて metalsmith-less に切り替えます。
パーシャルについて
ファイル名が_variables.sassなどのように先頭にアンダースコアが付いている場合、
パーシャルと判断され出力ファイル群から削除されます。もちろん削除されると言っても、
プラグイン間に流れる処理過程のソースファイルから除去されるだけであり、元のファイルは残ります。
そのため、パイプライン内のパーシャルファイルが消えても、変換対象の Sass ファイルは
ソースディレクトリにそのまま残っているパーシャルを import などで参照することができます。
参考までに、パイプライン内のソースファイル名を列挙するコードを紹介します。
下記のコードで本プラグインの記述を挟むと、パーシャルが消え Sass ファイルの拡張子が.cssに変わる様子が見られます。
.use(function(f,m,d){console.log(Object.keys(f));d();})
outputDir オプション
変換した CSS ファイルの出力先は Metalsmith.destination() + outputDirOption で定義されます。
outputDir オプションに css/ のようにパス文字列を渡すとそこにすべて配置されます。
この場合、元あった階層は維持されません。構造を維持したい場合はオプションにパス文字列を変換する
関数を渡します(詳しくはプラグインの README 参照)。
公式サンプルのように replace を使って、scss フォルダにあったファイルを css フォルダに配置することができます。
metalsmith-less
Less プラグインです。拡張子 .less ファイルを CSS に変換します。 上記 Sass プラグインと同様、ソースファイルや配置ディレクトリをプラグインに渡す必要はありません。 Metalsmith の流儀として、すべてのソースファイルがプラグインの処理対象となるからです。
対象とする Less ファイルはオプションの pattern で指定することができます。
metalsmith-assets
Metalsmith.source() で定義したソースファイル群に、そことは別のディレクトリにあるアセットファイル(各種ライブラリや画像)を含めます。
例えば Metalsmith で扱うコンテンツがマークダウンで、ソースフォルダには .md ファイルのみを配置したい、
アセットファイルはあえて別の階層に置いて管理したい、という場合に役立ちます。
実際にはサイト固有のスタイルシートを用意することと思います。今どきは Sass などを使うのが便利なため、
metalsmith-sass プラグインと組み合わせてビルドすることになるでしょう。
metalsmith-markdown-remarkable
Markdown の実装の1つである Remarkable を使って、拡張子.mdまたは.markdownファイルを HTML に変換します。プラグインに渡された引数は内部 Remarkable の function にそのまま渡しているため、透過的に扱うことができます。引数の preset や options だけでなく、Remarkable 自体のプラグイン機構であるuse()を適用することもできます。
jonschlinkert/remarkable
RemarkableRemarkable demo
LIVE DEMO で Remarkable を試すpackages with keyword ‘remarkable-plugin’ - npm
Remarkable のプラグイン一覧
Remarkable plugins
remarkable-emoji
絵文字プラグイン。:laughing:のように書くと絵文字に変換されます。 ただし、 Front matter を使用していると機能しないようです…。 今どきは OS とブラウザが進化しているので、そのまま絵文字を文書に打ち込めば大体表示されます💁remarkable-classy
クラス割当プラグイン。 Markdown 記述要素の末尾に{blue}のように書くと HTML 変換時にclass="blue"が割り当てられます。
metalsmith-asciidoc
AsciiDoc の実装の1つである Asciidoctor.js を使って、拡張子 .adoc または .asciidoc ファイルを HTML に変換します。
- AsciiDoc Home Page
AsciiDoc 本家 - asciidoctor/asciidoctor.js
Asciidoctor の JavaScript 版
metalsmith-prism
Prism.js を使ってシンタックスハイライトを実現します。
拡張子がhtmlまたはhtmのファイルを対象に適用されます。
Markdown プラグインを使っている場合は、それよりも後にこのプラグインを動作させる必要があります。
- Prism - Supported languages
Prism でシンタックスハイライトが可能な言語の一覧
metalsmith-jade
Jade プラグインです。拡張子 .jade を HTML ファイルに変換します。
useMetadata オプション
Metalsmith のメタデータを Jade 内の処理で扱えるように渡すかどうかを指定します。
metalsmith-layouts
A metalsmith plugin for layouts
metalsmith-permalinks
例えば about.html であれば about/index.html に変換して出力することで、
以下のような URL でアクセスできるようにします。URLのindex.htmlは省略できることを利用しています。
http://example.com/about.html
↓http://example.com/about/
ファイル管理上の利点
このプラグインの強みはファイル毎に定義したメタデータで出力先を振り分けることができることです。 言い換えるとURLで表現するディレクトリの通りに配置しなくてもよいのです。 例えば、カテゴリを含まない記事IDでアクセスするようなURL構造のサイトを考えます。 コンテンツが充実してくると、1つのフォルダに100を超えるような Markdown ファイルで溢れ返ります。 これらを内部的に日付やカテゴリで区切って整理するものの、URLはその構造を隠して短く、といったことが実現できます。
- syon/wiki
記事IDでアクセスするサイトの実例 - wiki/src/md at master · syon/wiki
Markdown ファイル名の頭文字で内部的にフォルダ分けした実例
使用上の注意
対象となるHTMLファイルと同じ階層にあるのファイル(拡張子.html以外)を複製して
新しいディレクトリを作り出すことで実現しているため、無駄なファイルがどんどん増えてしまいます。
これは変換前のHTMLに記述された画像などの参照情報が同階層に対して行われている可能性に対する配慮と思われます。
この挙動はオプション relative を使って OFF にすることができます。
OFF にすると同階層に対する参照が失われるため、同階層の画像などを別の場所に移し、
ルートパスを使った書き方にすることで対処します。
デメリットとしては、例えば Markdown 記述時の画像の配置先が離れること、参照先もそれを意識した
記述とする必要があることが挙げられます。ローカルのエディタ上で画像もプレビューしながら書くためには、
ルートパスの記述に対応したエディタを選ぶ必要があります。参考までに、Atom は対応しているようです。
metalsmith-permalinks #relative-files
Relative Files についてルートパスって何? | レモンのいれもんデザイン備考録
ルートパスの図解による説明
metalsmith-mapsite
sitemap.js を使ってサイトマップ (sitemap.xml) を生成するプラグインです。
hostname オプション(必須)
URL を生成するための、ベースとなるパスを指定します。
例えばこのサイトのように GitHub Pages のプロジェクトページとして公開する場合は 'https://syon.github.io/refills/' となります。
他のオプションを使用しない場合に、引数をオブジェクト形式ではなく文字列として1つ渡すと hostname 扱いしてくれます。
omitIndex オプション
URL の末尾が index.html の場合に除外します。
metalsmith-permalinks を使うときに便利です。
metalsmith-watch
A metalsmith plugin to watch for a changes and trigger rebuilds.