Pugでhtmlをコンパイル
sassのようにhtmlでもコンパイルできないものかと探していたらpugがいい感じだったのでメモ
似たようなものでhamlがあるが、pugしました。
理由は下記
- コンパイルがnode
- 記法がsassに似ている
インストール
まずはNodeをインストールNode
node -v
v10.15.0
npm install pug -g
# 今回は-gでマシン全体にしました。
# 開発のみなら-Dでpackage.jsonにしてもいいかも
コンパイル
test.pug
doctype html
// コメント
html(lang="ja")
  head
    meta(charset="utf-8")
    style(src="css/style.css")
    title テスト
  body
    h1#sitettl Pugタイトル
    main.main
      h2.content_ttl サブタイトル
pug test.pug
pug.html
<!DOCTYPE html>
<!-- コメント-->
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <style src="css/style.css"></style>
    <title>テスト</title>
  </head>
  <body>
    <h1 id="sitettl">Pugタイトル</h1>
    <main class="main">
      <h2 class="content_ttl">サブタイトル</h2>
    </main>
  </body>
</html>
gulpでコンパイル
sassと同じくpugもgulpでコンパイルを自動でタスク処理をしました
必要なパッケージをインストール
# gulpをインストールgulpのバージョンはGulp 4
npm install gulp -D
npx gulp -v
# CLI version 2.0.1
# Local version 4.0.0
# pug 用のgulp パッケージをインストール
npm i -D gulp-pug gulp-notify gulp-plumber
gulpファイルを作成
ディレクトリの構造はこんな感じ
develop/
├──assets/
   ├──pug/ #ここにpugファイルを作成
public/ # ここにhtmlファイルを作成
gulpfile.js
// パッケージをインストール
const gulp = require("gulp");
const notify = require("gulp-notify");
const plumber = require("gulp-plumber");
const pug = require("gulp-pug");
//pug入力先、html出力先を記述
const paths = {
  src: {
    pug: "develop/assets/pug/**/*.pug",
  },
  public: {
    html: "public/",
  },
};
// setting : Pug Options
const pugOptions = {
  pretty: true,
};
// pugコンパイル
gulp.task("pug", done => {
  gulp
    .src(paths.src.pug)
    .pipe(
      plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })
    )
    .pipe(pug(pugOptions))
    .pipe(gulp.dest(paths.public.html));
  done();
});
gulp.task("dev", () => {
  gulp.watch(paths.src.pug, gulp.task("pug"));
});
gulpを動かす
package.json
"scripts": {
  "dev": "gulp dev"
}
npm run dev
# Using gulpfile ~\gulpfile.js
# Starting 'dev'...
# Starting 'pug'...
# Finished 'pug' after 22 ms
# こんな感じになればdevelop/assets/pugのファイルがpublicにhtmlが作成される
