実現したいこと

hugoコマンドは出力先ディレクトリに生成物を上書きするだけで、既存のファイルを削除しない。記事のslugを変更したり記事を削除したりしてからビルドすると、古い記事のHTMLが出力先に残り続ける。

出力先を毎回まっさらな状態にしてからビルドしたい場合は--cleanDestinationDirを使う。

使い方

hugo--cleanDestinationDirを付ける。

$ hugo --cleanDestinationDir

-d(--destination)で出力先を分けている場合も同様に付けられる。

$ hugo -d /tmp/hugo-check --cleanDestinationDir

参考: 【Hugo】-dオプションでビルド結果を別ディレクトリに出力する

動作確認: 余分なファイルが削除される

出力先に生成物と無関係なファイルを置いた状態で、--cleanDestinationDirを付けずにhugoを実行する。

$ touch /tmp/hugo-check/stray-old-file.html
$ hugo -d /tmp/hugo-check
$ ls /tmp/hugo-check/stray-old-file.html
/tmp/hugo-check/stray-old-file.html

ビルド後もファイルは残ったままである。同じ状態で--cleanDestinationDirを付けて実行すると、ファイルが削除される。

$ hugo -d /tmp/hugo-check --cleanDestinationDir
$ ls /tmp/hugo-check/stray-old-file.html
ls: /tmp/hugo-check/stray-old-file.html: No such file or directory

ドットファイルも同様に削除対象になる。

$ touch /tmp/hugo-check/.hidden-file
$ hugo -d /tmp/hugo-check --cleanDestinationDir
$ ls -a /tmp/hugo-check/.hidden-file
ls: /tmp/hugo-check/.hidden-file: No such file or directory

削除対象は出力先ディレクトリの中身のうち、今回のビルドで生成されなかったファイルすべてである。記事のslugを変更した場合、変更前のslugで生成されていたHTMLはこのタイミングで消える。

出力先ディレクトリが存在しなくてもエラーにならない

出力先ディレクトリがまだ存在しない場合でも、--cleanDestinationDirはエラーにならずビルドが通る。

$ rm -rf /tmp/hugo-check-new
$ hugo -d /tmp/hugo-check-new --cleanDestinationDir
$ ls /tmp/hugo-check-new | head -3
404.html
algolia.json
android

削除対象のファイルが存在しない場合は単に何もしない。初回ビルドかどうかを気にせず常に付けておける。

参考: hugo | Hugo