VueJS+WebpackアプリをフルPug化する

VueJS+Webpack のアプリで HTML をやめ、すべて Pug で記述できるようにする方法をまとめました。

はじめに

Pug は HTML を簡略記法で記述できるようにするツールです。

例えば、HTML で、

<!DOCTYPE html>
<html lang="ja">
  <head>
    <title>Pug</title>
  </head>
  <body>
    <h1>Pug - Node template engine</h1>
    <div id="container" class="col">
      <p>You are so cute</p>
    </div>
  </body>
</html>

が、Pug だと、

doctype html
html(lang='ja')
  head
    title Pug
  body
    h1 Pug - Node template engine
    #container.col
      p You are so cute

となります。シンプルですね。

前提

vuejs-templates/webpack のテンプレートの構成を前提とします。

インストール

インストールは、npm を使うだけです:

$ npm i -D pug pug-loader

Vue の単一ファイルコンポーネントの変換

*.vue ファイルのテンプレートは lang="pug" を付けて、HTML を Pug の記述方法に変更するだけです。

<template lang="pug">

index.html の変換

問題は、トップにある index.html ファイルです。

まず、index.htmlindex.pug にリネームして、中身を Pug で書き換えます。

次に webpack.base.conf.js に設定を追加します:

  module: {
    rules: [
      .....
      {
        test: /\.pug$/,
        loader: 'pug-loader'
      }
.....

そして、webpack.dev.conf.js を以下のように書き換えます:

  plugins: [
    .....
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'index.pug',  // この行を変更
      inject: true
    }),
.....

同様に webpack.prod.conf.js も変更します。

これでフルPug化できました!

おまけ

HTML から Pug への変換は、ネットのサービスを使うと楽です。