stylexについて調べる
ここ最近(個人的に)CSS周りがアツイので調べる
サポート環境
現状公式が対応している環境は webpack, rollup, Next.js
Next.js はスタートダッシュ切ってうまく実行できてそうな人がいたので自分は Vite の react-ts あたりを試す
Vite react-ts で動作させてみる
Installation の rollup を参考に npm create vite@latest project -- --template react-ts
で作れるいつのも環境をセットアップする。
この辺りはドキュメントにもある通り必須だったのでとりあえず導入
@stylexjs/stylex
@stylexjs/rollup-plugin
@stylexjs/dev-runtime
詳しくは後で書くけど、上のパッケージだけだと動かないので babel プラグイン群も追加
@babel/plugin-syntax-flow
@babel/plugin-syntax-jsx
@babel/plugin-syntax-typescript
次に Dev 環境で動作させるためにランタイムを差し込むんだけど、ドキュメント通りに書くと必須プロパティが足りなくて怒られるのでいくつか追加した。
/* more imports */
import inject from '@stylexjs/dev-runtime';
inject({
classNamePrefix: 'x',
dev: true,
test: false,
// ドキュメントに書いてあるのはここまで
useRemForFontSize: false,
runtimeInjection: true,
styleResolution: "application-order",
});
/* more program */
ここまでやった後に rollup プラグイン経由だとstylexを適用するファイルの仕分けを自分でやらないといけないことに気づいた。
実際に実行すると元々プロジェクトで利用されている module CSS の CSS ファイルを見にいって落ちた。(Prod 環境で実行すると最初に見にいく index.html
の時点で落ちる)
じゃあどうして Vite プラグインがないのかって話は絶賛議論中な模様。
Meta 的には Vite に対応するなら Astro とか Remix みたいな Vite を含んだ複雑なユースケース(SSRとか)に対応させたいとのこと。
いつかやる感は出てるけどもうやってます感はあまりないので何時ごろでそうかは不明
ファイル解決くらい単純なケースなら rollup プラグインから拡張するといいよ的なことも言っていた。
サードパーティーで vite-plugin- を作ってくれている人がいた。(早い)
これなら Dev 環境に stylex のランタイムを差し込まなくてもプラグインがよしなに解決してくれる。もちろんファイルも。
最終的には、プロジェクト立ち上げから
-
@stylexjs/stylex
とvite-plugin-stylex
のインストール -
vite.config.js
の plugins にvite-plugin-stylex
を追加
の2手順で動くようになった。
始めよう、stylex。
Vite プラグイン作ってくれてるっぽい PR があったの見落としていた。
ユニットテストと Dev 環境で CSS が生成される問題以外の基本的な部分はできているらしい?