Assembleのプラグインを作ろうとした時のメモ。
v0.6系は開発中なので、安定版のv0.4系のみに対応する。
プラグインを利用する場合
作り方以前に、assembleのプラグインはどうやって使うのか。
assemble-middleware-rssのREADMEを参考に、プラグインを利用する際に必要なことは以下の2つだけ。
- npm install
- Gruntfileのassembleでプラグインの追加
プラグインをインストールして、Gruntfileにプラグインの記述を追加すれば使えるようになる。
assemble-middleware-rssの場合、npmをインストールして
$ npm i --save-dev assemble-middleware-rss
Gruntfileにプラグインの設定を追加するだけ。
assemble: {
options: {
plugins: [
'assemble-middleware-rss'
],
rss: {
title: 'rss title',
description: 'rss description'
}
}
}
プラグインの作り方
一般的なnpmの作り方とほとんど一緒。Node.js - 3分でできるnpmモジュール - Qiitaのような感じで、最終的にnpm publish
する。
$ mkdir assemble-index-json
$ cd assemble-index-json
$ npm init
$ touch index.js
... # プラグインの中身作る
$ npm publish
index.jsでプラグインのモジュールを作る。
module.exports = function (params, cb) {
// ここにプラグインの処理を書く
cb();// 処理の最後に第二引数のコールバック関数を呼び出す
};
第一引数には、grunt
とassemble
のオブジェクトが格納されたオブジェクトが入ってるので、Gruntfile
でassemble
のタスクに設定した内容は、
params.assemble
の中から取得できる。
プラグイン独自のオプションがある場合は、params.assemble
以下に独自で定義したオプションがあるので、そこから設定されているオプションの値を取り出す。
実行するタイミング
プラグインの処理をassemble
がページを生成する過程のどのタイミングで行うのか、選べるようになってる。
ドキュメントは見当たらないけど、assembleのソースコードからして、以下のいずれかのタイミングでプラグインの処理を実行できるぽい。
-
options:pre:configuration
: assembleのオプション等を読み込む直前 -
options:post:configuration
: assembleのオプション等を読み込んだ直後 -
assemble:pre:layout
: layoutのhbsを読み込む直前 -
assemble:post:layout
: layoutのhbsを読み込んだ直後 -
assemble:pre:partials
: partialのhbsを読み込む直前 -
assemble:post:partials
: partialのhbsを読み込んだ直後 -
assemble:pre:data
: dataを読み込む直前 -
assemble:post:data
: dataを読み込んだ直後 -
assemble:pre:pages
: pageを読み込む直前 -
assemble:post:pages
: pageを読み込んだ直後 -
render:pre:pages
: ページを生成する直前 -
render:post:pages
: ページを生成した直後
例えば、以下のようにstage
に値を渡せば、
module.exports.options = {
stage: 'render:post:pages'
};
全てのページが生成された後のタイミングでプラグインの処理を実行するように制御できる。
v0.6.0
開発中のv0.6.0は、assemble単体で動かせるようになる予定なので、gruntのプラグインが前提のv0.4.xとはだいぶ変わるようで、プラグインの書き方も違ってるので、v0.6.0が正式リリースされたらプラグインのコードをv0.6.0対応に書き換える必要がある。