当初はできる限りストリームで扱い「プレゼンテーション(.html)」等はpage/*
以下に配置していたが、変換処理が重いのでキャッシュを作成しながらファイルとして書き出すことにした。
ただし、厳密な排他制御をしていないので今回は静的生成のみ対応としている。
pages/deck[id].tsx
用のスライド作成時に hash を生成.mardock/cache/
以下に hash をキーとしてキャッシュを作成public/
以下にコピーするmarp.config.js
)(テーマ専用の機能ではないが)marp.config.js
の利用で「marp-cli から利用されるインスタンス」の生成に介入できる。ここでテーマをコード(文字列)として渡すことが可能。
const { Marp } = require('@marp-team/marp-core');
const themes = require('./src/marp-theme');
module.exports = {
engine: (opts) => {
const marp = new Marp(opts);
themes.forEach((theme) => marp.themeSet.add(theme));
return marp;
}
};
public/
等に静的なファイルを書き出す場合は next build
とは別に外部スクリプトを用意するのが定石のもよう。
今回はそれなりに進めてしまった後なので対応していないが、縛りがないのならば外部スクリプトは検討したほうが良い。
参考: Create a Next.js RSS feed for your static website - DEV Community
現在の構成では使っていないが、ログとしてメモしておく。
import { browser as marpCoreBrowserScript } from '@marp-team/marp-core/browser';
const Layout = ({ notification, head, body }: Props) => {
// snip...
useEffect(() => {
const cleanup = marpCoreBrowserScript();
return () => cleanup();
}, []);
// snip...
};