2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel Mix + glob => Pugのコンパイル自動化

Last updated at Posted at 2021-01-21

はじめに

LaravelにPugを導入する機会があり、いろいろと調査を重ね、
コンパイル時のパスマッピングを自動化することが出来たので載せてみました。

Laravel Mixの導入についてはnpmの公式サイトを参考にした。

前提

npmnode がインストールされている前提です。

【参考までに私の環境↓】

npm node
Ver. 6.14.11 v10.23.1

本題

調べてみるとSassやJsのコンパイル自動化は出てくるが、Pugについては見つからなかった。
それどころか諦めてしまっているものも見つかった。。
(もう少し早く辿り着けていれば助言出来たかも。。)
【webpack】【Laravel】laravel-mix-pugで特定のディレクトリを再帰的にビルドする方法はないでしょうか?

SassやJsの自動化をglobを使用して自動化するという記事を参考にさせていただきました。
【参考】
Laravel Mix+globによるコンパイルパスマッピング自動化

globの導入

bash
# webpack.mix.jsがある場所でインストール
$ npm install glob

次にwebpack.mix.jsを下記のように実装。

webpack.mix.js
const mix = require('laravel-mix');
mix.pug = require('laravel-mix-pug');
const glob = require('glob');

/**
 * pugのコンパイル用パス自動マッピング
 */
glob.sync(`resources/pug/**/*.pug`).map(function(file) {
    const index   = file.indexOf('/pug');
    const dir     = file.slice(index + 1);
    const dirPath = dir.split("/").reverse().slice(1).reverse().join("/");
    // コンパイル先のフォルダ/ファイル名
    const pugPath = dirPath.replace('pug', 'resources/views');
    // コンパイル元のフォルダ/ファイル名
    const exPath  = pugPath.replace('views', 'pug');

    // マッピングパスを動的に生成
    mix.pug(file, pugPath, {
        ext: '.blade.php', // コンパイル時、〇〇.blade.phpの拡張子で生成
        excludePath: exPath
    });
});

これで完成です。

注意点:

コンパイル元のフォルダと同じものがコンパイル先にないとエラーになる
例:
/resources/pug/test/hoge.pug をコンパイルしたい場合、
/resources/views/test を作成してから行うこと。

excludePathの指定を忘れると、ルートディレクトリ直下にファイル生成をしようとしてしまう。

・参考にさせていただいた記事の
ファイルごとにピックアップしてコンパイルしたいとき
については実装していないため、コンパイル実行時ファイル数によっては時間がかかる。

まとめ

調べても中々出てこなかったので苦労しましたが、自動化は便利だなと。。
やっぱりLaravelでは中々Pug使わないのかな。。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?