ビルド状態(Build State)
ビルドディレクトリに保存される前回のビルドの記録で、エントリ、フィンガープリント、依存関係、出力の変更を保持します。
場所と内容
.riebeckite/build/content-state.jsonに保存されます。
エントリ、フィンガープリント、依存関係、パイプラインのフィンガープリント、マニフェストエントリ、出力、外部依存関係、マニフェストフックのキャッシュを保持します。
次のビルドはこれを読み、増分ビルドの変更セットを計算します。
バージョンと妥当性
バージョンはCONTENT_BUILD_STATE_VERSION(現在は19)です。状態が欠落しているか、非互換か、不正な形式の場合はフルビルドの経路に入ります。状態はビルドが成功したあとにだけ更新されるため、失敗したビルドが以前の正常な状態を壊すことはありません。保存する形を変えるとバージョンが上がるため、古いバージョンで書かれた状態は無視され、ビルドはフルビルドの経路にフォールバックします。
ビルド状態の構造
packages/core/src/content/content_build_state.tsのContentBuildState型には次が含まれます。
version:number(現在は19)entries:Readonly<Record<string, ContentBuildEntry>>— フィンガープリント、エイリアス、依存関係、リンク先、処理済みコンテンツキャッシュのフィンガープリントを含む、エントリごとの状態contentIndex:Readonly<Record<string, string>>— コンテンツのslugからパスへの対応pipelineFingerprint:string | undefined — 増分ビルドの妥当性チェック用のパイプラインのフィンガープリントmanifestEntries:readonly ContentManifestEntry[]— 前回のビルド時点のマニフェストエントリのスナップショットoutputs:readonly OutputDescriptor[]— 前回のビルドの出力記述子externalDependencies:readonly PersistedExternalDependency[]— 外部依存関係のスナップショットmanifestHookCache:readonly ManifestHookCacheEntry[]— 実行順に並んだ、マニフェストフックごとの1エントリ。キャッシュ可能なフックは、入力に対して変更したマニフェストエントリだけを、エントリの順序が変わった場合はorderの一覧もあわせて保存します。エントリ以外のマニフェスト状態も変更するフックはスナップショットを保存せず、毎回実行されます。
ContentBuildEntry(packages/core/src/content/content_build_state.ts)は次を保持します。
fingerprint:string — ソース、frontmatter、パイプライン、プラグインのキャッシュバージョンを含むコンテンツのフィンガープリントaliases:readonly string[]— frontmatter由来のエントリのエイリアスdependencies:readonly ContentBuildDependency[]— 安定した識別子を持つコンテンツとファイルの依存関係linkTargets?:readonly string[]— 解決済みのリンク先のslugprocessedContentCacheFingerprint?:string— 処理済みコンテンツキャッシュの取り決めのフィンガープリント
ContentBuildDependency(packages/core/src/content/content_build_state.ts)は次を記録します。
kind:"content"または"file"id:string — コンテンツのslugまたはファイルのパス
以降のビルドでは、前回の状態を読んで増分ビルドの変更セットを計算します。パイプラインのフィンガープリントを比較し(previousState.pipelineFingerprint !== pipelineFingerprint)、パイプラインの構成が変わっていればフルビルドを引き起こします。状態はビルドが成功したあとにだけ保存されるため、失敗したビルドが以前の正常な状態を壊すことはありません。