インクルード
ページ間でコンテンツを再利用 — 共有の Markdown、MDX、コードファイルを include 構文で任意のページに差し込みます。
スニペットを一度書けば、任意のページに差し込めます。単独の行に置いた <include> 文は、ビルド時に別のファイルを埋め込み、その内容がインラインで書かれていたかのように扱われます — 見出しはページの目次に加わり、テキストは検索でインデックスされ、内容はページの .md ミラーおよび llms-full.txt にも現れます。
<include>./_snippets/prerequisites.mdx</include>
パスはインクルード元のファイルからの相対で解決されます。/ で始まるパスはコンテンツルートから解決されるため、深くネストしたページでも ../../.. の連なりなしに共有スニペットを参照できます。
<include>/_snippets/prerequisites.mdx</include>
この構文は Fumadocs の include 構文と一致しているため、移行したコンテンツはそのまま動作します。
こちらが実際の動作です — 次のコールアウトは共有スニペットから差し込まれたものです。
パーシャル
名前(またはフォルダー名)がアンダースコアで始まるファイルは、デフォルトでルーティング、ナビゲーション、検索、サイトマップから除外されます。この慣習は共有スニペットの置き場所として最適です。
docs/
_snippets/
prerequisites.mdx
cli-flags.md
guides/
quickstart.mdx ← <include>../_snippets/prerequisites.mdx</include>
index.mdx
パーシャルは通常の Markdown または MDX ファイルです。差し込み時にフロントマターは取り除かれ(インクルード元ページのフロントマターが優先されます)、それ以外のすべて — コールアウト、コードフェンス、コンポーネント、数式 — はインラインで書いた場合とまったく同じようにレンダリングされます。パーシャルは他のパーシャルをインクルードできます。循環インクルードはエラーとして報告されます。
パーシャル内の相対画像参照はそのまま機能します。インクルード元のページを基準に再解決されるため、パーシャルの隣に配置した  は、そのパーシャルがどこに差し込まれても正しく解決されます。
blume dev の実行中にパーシャルを編集すると、それをインクルードしているすべてのページがリロードされます。
コードファイルのインクルード
.md/.mdx 以外のターゲットは、拡張子から推論された言語でフェンス付きコードブロックとして埋め込まれます。言語を上書きするには(または Markdown ファイルを差し込む代わりにソースとして表示するには)lang を使い、タイトルなどのフェンスのメタ文字列を渡すには meta を使います。
<include>./examples/config.ts</include>
<include lang="ts" meta='title="blume.config.ts"'>
../blume.config.ts
</include>
<include lang="mdx">./_snippets/prerequisites.mdx</include>
ルールと診断
include 文は単独の行を占める必要があります — インラインではなくブロックレベルの要素だからです。フェンス付きコードブロック内の文はそのまま残されるため、(このページのように)構文そのものをドキュメント化できます。
ターゲットはコンテンツルート内に存在しなければなりません。ルート外のファイルはバージョンスナップショットや eject したプロジェクトから黙って欠落してしまうため、blume は差し込む代わりに BLUME_INCLUDE_OUTSIDE_ROOT を報告します。存在しないターゲットは BLUME_INCLUDE_NOT_FOUND、インクルードのループは BLUME_INCLUDE_CYCLE となります。これら 3 つはいずれも blume build を失敗させ(それでもビルドするには --no-strict を渡します)、blume validate にも表示されます。
パーシャル内のリンク切れは、それを差し込んでいるページではなくパーシャルのファイルに対して報告されるため、実体のある場所で修正できます。