I log …

gulpとjsonとpugでhtml量産

目次

  1. devDependencies
  2. gulpfile.babel.js
  3. json
  4. pug
  5. まとめ

 普段静的サイトを構築する際に、gulpでpugをコンパイルして作っています。
 それを拡張して、jsonからデータをとってきてpugで作ったテンプレを利用してページの量産ができる構築環境を作りました。

devDependencies

 多いな……! というわけでyarn addするならこんな感じ。
  yarn add -D fs-extra gulp gulp-pug gulp-rename

 私はgulpfileにおいてimportが必要なのでgulpfile.babel.jsを使っていますが、この記事を書くにあたりgulpのドキュメントを改めて読んだらgulpfile.esm.jsでもいいのではという気もします。
 まあとにかく今インストールしたものをgulpfileでimportします。

gulpfile.babel.js

 jsonのデータの中身分forを回して、テンプレートに変数を渡し、それをコンパイルする。という流れになります。

 下記は複数ディレクトリで量産したいとき。デザインが違う想定で、data.jsonは同階層にある_template.pugを参照するように設定します。

json

 jsonのオブジェクトの最上位階層のキーはgulpfileに合わせる必要があります。上記のgulpfileの場合はsettingとcontentです。

 4行目で指定しているidによりtest.htmlが、14行目に指定しているidでtest.htmlと同階層にdirというディレクトリができ、その下層ページとしてunderlayer.htmlができます。
 同じテンプレを使うなら、ディレクトリを複数作らなくてもid次第で階層を深くすることができます。ただし階層が変わると相対パスがめちゃくちゃになるので、相対パスを使いたかったら5,15行目のように相対パス用の値を渡してあげる……というようなことが必要になります。

pug

 テンプレは、条件分岐やループを駆使して変数を読み込むだけでいいように作る必要があります。
 gulpfileで渡している$settingと$contentというオブジェクトを使い倒します。

まとめ

 gulp+pug+jsonで工夫次第で爆速構築できます!sandboxで見せたかったけど断念。