見出し画像

Deno+Lumeでupgradeしたらビルドできなくなった時のメモ

Lumeのバージョンを v2.0.xにしたらNunjucksのlayoutがビルドできなくなったので解決した方法をメモしておきます

結論

Lumeのバージョンをv1からv2にしたところ、デフォルトのconfigではv1系のデフォルトテンプレートエンジンは使わないためビルドできません。configに追加設定が必要です。

前提

簡単なブログを以下の構成で作っていました

DenoはJavaScript Runtimeですが、React.jsやVue.jsよりもリポジトリ構成をシンプルに高速に使えます。そしてLuneは事前ビルドすることでSSGにより静的ページとしてブログ運営が可能となります。

今回は春に作ったブログをバージョンアップさせようとして起こった出来事です。

事象

Lumeのバージョンをv2.0.1にてビルドしたところエラーがとなりました。どうやらNunjucksで定義したlayoutファイルを見つけてくれません

/workspaces/deno-sample-codespace (main) $ deno task build
Task build deno task lume
Task lume echo "import 'lume/cli.ts'" | deno run --unstable -A -
Loading config file file:///workspaces/deno-sample-codespace/_config.ts
Error: Error rendering the layout of the page /index.md
    at https://deno.land/x/lume@v2.0.1/core/renderer.ts:176:19
    at eventLoopTick (ext:core/01_core.js:178:11)
Caused by Error: The layout format "layout.njk" doesn't exist
    at Renderer.#renderLayout (https://deno.land/x/lume@v2.0.1/core/renderer.ts:259:15)
    at https://deno.land/x/lume@v2.0.1/core/renderer.ts:159:52
    at concurrent (https://deno.land/x/lume@v2.0.1/core/utils/concurrent.ts:10:33)
    at eventLoopTick (ext:core/01_core.js:178:11)
    at async Renderer.renderPages (https://deno.land/x/lume@v2.0.1/core/renderer.ts:155:7)
    at async Site.#buildPages (https://deno.land/x/lume@v2.0.1/core/site.ts:584:5)
    at async Site.build (https://deno.land/x/lume@v2.0.1/core/site.ts:506:9)
    at async build (https://deno.land/x/lume@v2.0.1/cli/build.ts:34:3)
    at async Command.execute (https://deno.land/x/cliffy@v0.25.7/command/command.ts:1794:7)
    at async Command.parseCommand (https://deno.land/x/cliffy@v0.25.7/command/command.ts:1639:14)

エラー時の_config.ts

import lume from "lume/mod.ts";

const site = lume();

export default site;

確認方法としてはdeno.jsonで指定していたバージョンを1系の最後 1.19.4までは正常ビルドできる。2.0.0にするとエラーになる。というところまではわかりました。

解決方法

_config.tsファイルにて明示的にモジュールをインストール必要がありました

configでnunjucksの利用宣言が必要みたいです

import lume from "lume/mod.ts";
import nunjucks from "lume/plugins/nunjucks.ts";
const site = lume();
site.use(nunjucks(/* Options */));
export default site;

site.use(nunjucks(/* Options */)); で とりあえずOptionsは空で問題なしです。import nunjucksで宣言しているのでビルド時に自動でインストールされます。

原因:v2で破壊的変更が入っていた

エラーログからたどり着けませんでした。原因はデフォルトのテンプレートエンジンの変更です。しっかりとブログの先頭に書かれていました。

Ventoがバージョン2でのデフォルトエンジンのようでNunjucksと似た感じで書けるようなことが書かれています。

豆蔵ブログさんなどはわかりやすくまとめられていますがバージョン2.0.0がリリースされたのは2023年の12月、新しすぎてこのことは反映されていない可能性があるのでご注意ください

どなたかがdenoアドベントカレンダーで書いてくださるかもしれません


広告


よろしければサポートお願いします。プロデュース代になります