qrac / minista

Static site generator with 100% static export from React and Vite.
https://minista.qranoko.jp
167 stars 13 forks source link

全文検索機能を再設計 #78

Closed qrac closed 1 year ago

qrac commented 2 years ago

Partial Hydration #77 次第。開発中にメモリ上のみで済ませられると綺麗。

qrac commented 1 year ago

全文検索に使うメモリはサイト全体のHTML量と同じで大きいため、開発で編集のたびに更新するのはパフォーマンス的によくなさそう。buildStart時に1度だけwriteJsonする仕様にする。

qrac commented 1 year ago

本番のjsonPathを指定しないといけなかったのを、内部で自動解決するようにした。

import { Search } from "minista"

// Before
export default function () {
  return <Search jsonPath="/assets/search.json" />
}

// After
export default function () {
  return <Search />
}
qrac commented 1 year ago

プラグインのtransformでコンポーネントをreplaceする手法は、リリース後だとキャッシュされてreplaceできないため不可。

qrac commented 1 year ago

プラグインの処理をコアよりも早くすることで解決される前にtransformできた。

また、開発中はoptimizeDepsでバンドルされてコンポーネントのidが判別できなくなるため minista をexcludeする。

qrac commented 1 year ago

プラグインのtransformでコンポーネントをreplaceする手法の検証

故に、全文検索コンポーネントは開発中動いていない。

qrac commented 1 year ago

全文検索を使ったかどうかの判定を非同期ファイル生成とファイル確認に頼っていたが、どうも期待通りの順序で動いていないらしく、キャッシュのない1度目のビルドでsearch.jsonを生成できていない。

qrac commented 1 year ago

全文検索の判定はパースhtmlのqueryselectorで行う。

qrac commented 1 year ago

ビルド時はコンポーネントのtransformが効く。

qrac commented 1 year ago

相対パスビルドの場合にどうするかも検討。

qrac commented 1 year ago

fetchに相対パスを使うと使用しているページがベースURLになってしまうので相対パスとして機能しない。ライブラリによってはfetchにbaseURLを指定して動かす方法はある。

fetch("./search.json", { 
  baseURL: "https://example.com/assets/"
})
qrac commented 1 year ago

base: "./" の場合もsearch周りはルートパスになるが、baseUrl をオプションに加えるとビルド後のjsからのパスやリンクパスにbaseURLを追加できる仕様にした。

qrac commented 1 year ago

draft: true は開発中は表示され、本番ビルドした場合は含まれない仕様に変更。納品前に確認できる方が良いため。

68 と同様。