はじめに
年に1、2回の頻度でしか更新しないものの、そこそこ複雑な構成のHugoプロジェクトがあります。
これは同じ頻度で更新されるCSVデータに強く依存していて他のプロジェクトと統合することが難しく、メンテナンスは頻繁には行っていません。
データを更新したのでコンテンツを生成したところ、Hugoのバージョンが上がっているためエラーになってしまいました。
エラーメッセージで検索すると主な原因はGoのテンプレートライブラリが変更されたことのようだとは分かったのですが、根本原因は複数あるようですぐに解決できなかったのでまとめておきます。
原因が異なるGo Templateに関連した類似の障害情報
- https://stackoverflow.com/questions/73675601/go-1-19-error-executing-template-range-branches-end-in-different-contexts
- https://groups.google.com/g/golang-nuts/c/0HJoROz2TMo
- https://qiita.com/matopenKW/items/015b171624b0b5882a51
エラー#1. js.Build
Start building sites …
hugo v0.122.0+extended linux/amd64 BuildDate=unknown
ERROR render of "page" failed: ".../layouts/_default/baseof.html:4:7": execute of template failed: \
template: _default/single.html:4:7: executing "_default/single.html" at <partial "head.html" .>: \
error calling partial: ".../layouts/partials/head.html:23:54": execute of \
template failed: template: partials/head.html:23:54: \
executing "partials/head.html" at <js.Build>: error calling Build: no Resource provided in transformation
...
対応
HugoでJavaScriptのコードをminifyした後の処理で問題が発生しています。
この場合の原因は元のHTMLコードにありました。
最後のno Resource provided in transformationのメッセージが示しているように変換対象のファイルにアクセスできなくなっていることが原因です。
元のコードは次のようになっています。
{{- $jsdefault := resources.Get "js/default.js" | js.Build (dict "minify" "true") }}
<script type="text/javascript" src="{{ $jsdefault }}"></script>
これは"js/default.js"がassetsディレクトリに存在しないことが原因でした。static/jsディレクトリから必要なファイルをassets/jsディレクトリに移動し、js.Buildが無事に動作しました。
エラー#2. 空のHTMLコメント
また似たようなエラーですが、少し内容の違うメッセージが出現しました。
Start building sites …
hugo v0.122.0+extended linux/amd64 BuildDate=unknown
ERROR render of "page" failed: ".../layouts/_default/baseof.html:4:6": execute of template failed: \
template: summary/single.html:4:6: executing " summary/single.html" at <partial "head.html" .>: error calling partial: \
execute of template failed: html/template:partials/head.html: \
ends in a non-text context: {stateJS delimNone urlPartNone jsCtxRegexp attrNone elementScript <nil>}
Total in 35 ms
この時は次のようなHTMLコードに問題がありました。
--- a/.../hugo/layouts/partials/head.html
+++ b/.../hugo/layouts/partials/head.html
@@ -26,7 +26,7 @@
{{ $style := resources.Get "sass/default.scss" | toCSS | minify | fingerprint }}
<link rel="stylesheet" type="text/css" href="{{ $style.RelPermalink }}" />
{{ $jsdefault := resources.Get "js/default.js" | js.Build (dict "minify" "true") }}
-<script type="text/javascript" src="{{ $jsdefault.RelPermalink }}" ></script>
+<script type="text/javascript" src="{{ $jsdefault.RelPermalink }}" ><!-- --></script>
<!-- print specific settings -->
{{ $style := resources.Get "sass/print.scss" | toCSS | fingerprint }}
なぜかscriptタグの中に空のHTMLコメントが残っていて、この部分が原因でエラーになっていました。
まとめ
こんな事でもエラーになるのかと分っていれば対応も難しくないと思いますが、Hugoをいろいろ使っていても始めて遭遇したエラーだったので少し時間がかかりました。
参考になれば幸いです。
以上