実現したいこと
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
\Hugoでオリジナリティのあるサイトを作ろう!/
