Hugo
Hugo は、最も人気のあるオープンソースの静的サイトジェネレーターの 1 つです。その驚異的な速度と柔軟性により、Hugo は Web サイト構築を再び楽しくします。
PurgeCSS は、Hugo Pipes アセット処理を介して Hugo で使用できます。
ツール
統計情報の書き込み
config.toml ファイルに、これを追加します
[build]
  writeStats = true
または、config.yaml ファイルを使用している場合は、これを追加します
build:
  writeStats: true
これは、Hugo にビルドの一部としてプロジェクトルートに hugo_stats.json ファイルを書き込むように指示します。これには、*.html テンプレートからのすべてのタグ、クラス、および ID が含まれます。
Node パッケージ
プロジェクトルートに package.json ファイルがまだ存在しない場合(すべてのノードの依存関係を追跡します)、プロジェクトルートディレクトリからこのコマンドを実行して作成します
npm init
必要なだけ情報を入力できます。ファイルが作成されたら、パッケージのインストールを続行できます。
プロジェクトルートからこれを実行して、必要なパッケージをインストールします
npm install postcss postcss-cli @fullhuman/postcss-purgecss --save
パッケージは node_modules というフォルダーにインストールされ、package.json ファイルにも追加されます。
まだない場合は、node_modules/ を .gitignore ファイルに追加します。
PostCSS 設定ファイル
プロジェクトルートに、次の内容の postcss.config.js ファイルを作成します
const purgecss = require("@fullhuman/postcss-purgecss")({
  content: ["./hugo_stats.json"],
  defaultExtractor: (content) => {
    const els = JSON.parse(content).htmlElements;
    return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])];
  },
  safelist: [],
});
module.exports = {
  plugins: [
    ...(process.env.HUGO_ENVIRONMENT === "production" ? [purgecss] : []),
  ],
};
各オプションの詳細については、PurgeCSS 設定ドキュメント を参照してください。
注:safelist は(今のところ)空の配列です。HTML テンプレートからの要素のみが抽出されることに注意してください。したがって、JS が要素を追加する場合は、それらをセーフリストに登録する必要があります。
HTML テンプレート
<head> の HTML テンプレートに、これを追加します
{{ $css := resources.Get "css/style.css" | resources.PostCSS }} 
{{ if hugo.IsProduction }} 
    {{ $css = $css | minify | fingerprint | resources.PostProcess }} 
{{ end }}
<link
  rel="stylesheet"
  href="{{ $css.RelPermalink }}"
  {{ if hugo.IsProduction -}} 
    integrity="{{ $css.Data.Integrity }}"
  {{- end }}
/>
これは以下を前提としています
- CSS ファイルは assets/css/style.cssにあります
- このファイルのプロダクションバージョンを縮小してフィンガープリントを作成します
これらの前提が当てはまらない場合は、コードを適宜変更してください。
使用方法
これで使用できるようになりました。
サイトをデフォルトの開発モードで提供します
hugo serve
ブラウザの DevTools を開き、[ネットワーク] タブに移動して、CSS ファイルのサイズを確認します。
次に、Control + C で停止し、サイトを本番モードで提供します
hugo serve --environment production
CSS ファイルのサイズが*はるかに小さくなった*ことに注意してください。
環境
--environment production オプションを渡したくない場合は、この環境変数を設定します
HUGO_ENVIRONMENT=production
