Read Qwik
Qwik のソースコードを読む
Qwik の Vite プラグインの本体 (QwikCity ではない)
transformやloadなどの実装はplugin.ts
のcreatePlugin
がしてるっぽい?
ここ(Viteのloadフックで呼び出される)でQwikのoptimizerを呼び出してコードをコンパイルしているらしい
OptimizerのTypeScript APIはここで定義されてる、createOptimizer
という関数
そこではPlatformBinding
というものを渡しているらしい。これはloadPlatformBinding
という関数によってデフォルトは作成される。この関数の引数はOptimizerSystem
というものをとっている。
OptimizerSystem
はcreateOptimizer
内でgetSystem
という関数の結果をデフォルトとしているらしい。
開発環境(または本番環境)によってビルド方法を選択する形式なのかな?
loadPlatformBinding
によってSWCによって作られたoptimizerのWASMビルドを環境に合った形で読み込んでいるのか?
bindings
というフォルダの中を読み込んでるけど、これはwasm_bindgenによって作られたファイルだと思われる
このwasmをコンパイルするにあたってのエントリーはこれ:
このqwik-coreっていうクレートはpackages/qwik/src/optimizer/core
を指してるってさ[1]
このクレートの中を今読む必要はないが、何をしているのか、どんな出力をするのかは知りたい
テストのスナップショット発見、めっちゃ面白い
どうやら、one to oneでコードをトランスフォームしているのではなく、one to manyでやってるらしい。TypeScript APIを読んでる時に気になった、トランスフォームの結果が配列という意味がよくわかった。
超面白い
JSX は Optimizerでトランスパイルせず、Viteに任せる感じなのかな?
QRLはQRLごとにモジュールにしてDynamic Importで処理する感じなのか
状態はDynamic Import先に渡してるのか、超面白い
気になったこと:
- 外部モジュールはどのように処理されるのか、やはりDynamic Import??
-
export { _hW } from "@builder.io/qwik";
が気になる