-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Environment: ページごとの OGP タグ値の注入ルールを各ルートディレクトリーで定義できるようにする #77
Environment: ページごとの OGP タグ値の注入ルールを各ルートディレクトリーで定義できるようにする #77
Conversation
lazy じゃないほうの |
フロントエンドのビルド前に TypeScript ビルドしなくちゃいけなくなって最悪になってきた… |
scriptsはjsで書いてほしい |
書いてた |
23e27d0
to
959417a
Compare
JSで書くの不可能そう |
22e20b5
to
3a39e1b
Compare
tsで書いてts-nodeで動かしても良いかも |
e593f88
to
1a4cb19
Compare
実装はできた |
ts-node っぽいやつ (tsx) で動かすようにした |
@marihachi |
8fb1841
to
0abe10b
Compare
OK |
あとはOK |
`generate-template-html.js` で生成するため
Lazy **じゃない** ページファイルも必ず作成するよう変更
0abe10b
to
14d79b1
Compare
うおおおおお GitHub だと force push したときのレビューコメント箇所の差分出ないのか |
Why
ページごとの OGP タグの注入ルールの定義をルートディレクトリー (
routes/**/
)で各々定義できるようにしたい。これまで目指してきたやり方
Frontend ではリクエストパスによる条件分岐付きの
index.html
を実装する (ビルド時にindex.ejs
が生成されるようにする)。Backend では GET
/
(/index.html
) リクエストを受けた際にリクエストのパスや投稿情報等を基に frontend のビルド時に出来上がった
index.ejs
のレンダリングを行いレスポンスする。こうすることにより HTML (EJS) へ記載する OGP タグ等のルールが責務的に frontend 側で完結されつつ
EJS のレンダリングを行うサーバーが backend のみでよくなる (frontend 用のサーバーが必要なくなる)。
この PR で解決したいこと
とはいえ上記のやり方を愚直にやっていくと
index.html
(index.ejs
のソース) へルーティングを漏れなく記載していく必要がありファイルベースルーティングを導入しているのに
index.html
にもルーティング定義っぽいもの (ページごとのOGP タグ値の注入指示)を記載する必要がありindex.html
に記載する必要があるindex.html
の変更を忘れるリスクがある)という運用上の微妙ポイントが残る。
What
TanStack が吐いてくれる
routeTree.gen.ts
(ルート定義ファイル) を基にindex.html
を機械的に生成するようにする。TanStack の各ルート作成時に
staticData
というプロパティーを持たせることで、ルート情報に固有のオブジェクトを持たせることが可能っぽいためこれを使う。具体的には
ルートを作成する際に backend に入れてもらいたい OGP の変数等を
createFileRoute()
のstaticData
オプションに記載するようにしfrontend ビルド前に
routeTree.gen.ts
を収集し「各ルートのパスにより条件分岐を行ってstaticData
の OGP 値を注入してもらうEJSテンプレート (をコメントアウトによりHTMLセーフにしたもの)」を 生成する。その後は既存実装の
generate-ejs.js
により EJS を生成し、backend はランタイムでリクエスト時に EJS をレンダリングしてリクエストされたページに合う OGP タグが埋め込まれた HTML をレスポンスする。Changes
generate-template-html.js
実行時に TypeScript モジュールを読み込めるようにするためindex.html
を動的生成index.html
generate-template-html.js
により動的生成するようになったためgenerate-ejs.js
] 改行を含む EJS 構文をサポートまたLazy なページであっても
createFileRoute()
も一緒に実装するよう変更nodejs-mock-loader
Vite でバンドルされることを前提としているソースを Node.js で実行する際に
すっぴんの Node.js ではサポートされていない
.js
以外のファイル等のインポートがされているとエラーになるため代わりに空のファイルを返すようにするローダーを作るための関数を提供するパッケージ