Skip to content

はじめに

astro-dist-compressは、ビルド出力(dist/)に対して画像の圧縮・フォーマット変換を行うAstroインテグレーションです。astro-compressと異なり、ディレクトリ画像の状態(フォーマット・透過有無・サイズ)ごとの変換ルールをTypeScriptで直接定義でき、フォールバック画像の生成とHTMLの書き換えまで自動で行えます。

インストール

sh
npm install astro-dist-compress
sh
pnpm add astro-dist-compress
sh
yarn add astro-dist-compress

インテグレーションを追加

ts
// astro.config.ts
import { defineConfig } from "astro/config";
import distCompress from "astro-dist-compress";

export default defineConfig({
  integrations: [distCompress()],
});

これだけで、以下のデフォルトルールが適用されます。

  • 透過ありPNG → WebP
  • 透過なしPNG → AVIF
  • JPEG → AVIF
  • 上記すべてにWebPフォールバックを自動生成(すでにWebPを出力するルールには追加しません)
  • ビルド後のHTML内で、変換対象を参照する<img><picture>に自動書き換え
  • 元ファイルはデフォルトで保持

ビルド時のみ動作する設計

このインテグレーションはastro:build:doneフックを使っており、これはAstroがastro build実行時にのみ呼び出すフックです(astro devでは呼ばれません)。開発/ビルドを切り分ける分岐コードを書く必要は一切なく、astro devを実行してもこの処理経路自体に触れません。

sh
astro build
txt
[astro-dist-compress] compressing 12/14 image(s)...
[astro-dist-compress] done: 4.8 MB -> 1.6 MB (-66.7%)
[astro-dist-compress] rewrote 9 <img> tag(s) into <picture> across 5 html file(s).

次に読むページ