Closed3
vite-plugin-pug-staticの依存関係の事前バンドル対応検討
概要
Viteは開発サーバの初回起動時、正確にはキャッシュ(標準では node_modules/.vite
)に既存のバンドル情報が見つからない場合に、依存関係の事前検出とバンドル処理を行う。
この処理は「Viteのroot内の全てのHTMLに対するクロール」が起点となっているため、Pugしか存在しないプロジェクトでは機能しない。
これについてなんらかの対処をすべきかどうか、またすべきであれば具体的な方法について検討する。
リソース
vite-plugin-pug-staticはPugを静的なHTMLとして配信・出力するViteプラグイン(V2,V3対応)
本件プラグイン作成の経緯については以下を参照のこと。
先達。
依存関係の事前バンドルについての公式ドキュメントは以下の通り。
関連するコードは以下の通り。(中途)
- node/optimizer/index.ts > optimizeDeps
- node/optimizer/index.ts > discoverProjectDependencies
- node/optimizer/scan.ts > scanImports
- node/optimizer/scan.ts > esbuildScanPlugin
現時点のViteのバージョンは 3.0.4
未整理
- 事前バンドルが必要かどうか
- そもそも従来型静的サイトで大量の依存関係を使用するかどうか
- 従来型静的サイト以外の用途でこのプラグインが使われることはあるか
- 公式ドキュメントは「事前バンドルしなくても開発サーバ起動後に読み込まれた依存関係はキャッシュされ、次回以降の起動ではキャッシュが利用される」ように読める
- もしそうなら無理に事前にやらなくてもいい気がする
- 効能に対して実装コストが過大にならないか
- 大量のPugに対して事前バンドルを実行しようとすると逆にパフォーマンスに悪影響を及ぼさないか
- 数百・数千・5桁以上でどうか
-
optimizeDeps.entries
で事足りる説 - 事前バンドルのトリガをサードパーティのプラグインで利用または模倣できるか
- トリガが利用できないならoptimizerの動作前にHTMLを用意するくらいしか方法がないかも
- 事前バンドル解決用のHTMLを用意して標準のロジックに任せる方法は有効か
- outputに入れなければビルドでは無視されるのでゴミの問題はない
- HTMLが存在してもPugをオーバーライドしない設定(boolean | glob)を設けるべきか
- これは別の需要もありそう
このスクラップは2022/12/10にクローズされました