Closed3

vite-plugin-pug-staticの依存関係の事前バンドル対応検討

macropygiamacropygia

概要

Viteは開発サーバの初回起動時、正確にはキャッシュ(標準では node_modules/.vite )に既存のバンドル情報が見つからない場合に、依存関係の事前検出とバンドル処理を行う。

この処理は「Viteのroot内の全てのHTMLに対するクロール」が起点となっているため、Pugしか存在しないプロジェクトでは機能しない。

これについてなんらかの対処をすべきかどうか、またすべきであれば具体的な方法について検討する。

macropygiamacropygia

リソース

vite-plugin-pug-staticはPugを静的なHTMLとして配信・出力するViteプラグイン(V2,V3対応)

https://www.npmjs.com/package/@macropygia/vite-plugin-pug-static

本件プラグイン作成の経緯については以下を参照のこと。

https://qiita.com/macropygia/items/d37fd20a16fcef26914b

先達。

https://zenn.dev/yend724/articles/20220408-tfq16buha8ctdzp7

依存関係の事前バンドルについての公式ドキュメントは以下の通り。

関連するコードは以下の通り。(中途)

  • node/optimizer/index.ts > optimizeDeps
  • node/optimizer/index.ts > discoverProjectDependencies
  • node/optimizer/scan.ts > scanImports
  • node/optimizer/scan.ts > esbuildScanPlugin

現時点のViteのバージョンは 3.0.4

macropygiamacropygia

未整理

  • 事前バンドルが必要かどうか
    • そもそも従来型静的サイトで大量の依存関係を使用するかどうか
    • 従来型静的サイト以外の用途でこのプラグインが使われることはあるか
  • 公式ドキュメントは「事前バンドルしなくても開発サーバ起動後に読み込まれた依存関係はキャッシュされ、次回以降の起動ではキャッシュが利用される」ように読める
    • もしそうなら無理に事前にやらなくてもいい気がする
    • 効能に対して実装コストが過大にならないか
  • 大量のPugに対して事前バンドルを実行しようとすると逆にパフォーマンスに悪影響を及ぼさないか
    • 数百・数千・5桁以上でどうか
  • optimizeDeps.entries で事足りる説
  • 事前バンドルのトリガをサードパーティのプラグインで利用または模倣できるか
    • トリガが利用できないならoptimizerの動作前にHTMLを用意するくらいしか方法がないかも
  • 事前バンドル解決用のHTMLを用意して標準のロジックに任せる方法は有効か
    • outputに入れなければビルドでは無視されるのでゴミの問題はない
  • HTMLが存在してもPugをオーバーライドしない設定(boolean | glob)を設けるべきか
    • これは別の需要もありそう
このスクラップは2022/12/10にクローズされました