Closed11

stylexについて調べる

BaHoBaHo

Vite react-ts で動作させてみる

Installation の rollup を参考に npm create vite@latest project -- --template react-ts で作れるいつのも環境をセットアップする。

https://stylexjs.com/docs/learn/installation/#production

BaHoBaHo

この辺りはドキュメントにもある通り必須だったのでとりあえず導入

  • @stylexjs/stylex
  • @stylexjs/rollup-plugin
  • @stylexjs/dev-runtime

詳しくは後で書くけど、上のパッケージだけだと動かないので babel プラグイン群も追加

  • @babel/plugin-syntax-flow
  • @babel/plugin-syntax-jsx
  • @babel/plugin-syntax-typescript
BaHoBaHo

次に Dev 環境で動作させるためにランタイムを差し込むんだけど、ドキュメント通りに書くと必須プロパティが足りなくて怒られるのでいくつか追加した。

main.tsx
/* more imports */
import inject from '@stylexjs/dev-runtime';

inject({
  classNamePrefix: 'x',
  dev: true,
  test: false,
  // ドキュメントに書いてあるのはここまで
  useRemForFontSize: false,
  runtimeInjection: true,
  styleResolution: "application-order",
});
/* more program */
BaHoBaHo

ここまでやった後に rollup プラグイン経由だとstylexを適用するファイルの仕分けを自分でやらないといけないことに気づいた。
実際に実行すると元々プロジェクトで利用されている module CSS の CSS ファイルを見にいって落ちた。(Prod 環境で実行すると最初に見にいく index.html の時点で落ちる)

BaHoBaHo

じゃあどうして Vite プラグインがないのかって話は絶賛議論中な模様。

https://github.com/facebook/stylex/issues/47

Meta 的には Vite に対応するなら Astro とか Remix みたいな Vite を含んだ複雑なユースケース(SSRとか)に対応させたいとのこと。
いつかやる感は出てるけどもうやってます感はあまりないので何時ごろでそうかは不明

ファイル解決くらい単純なケースなら rollup プラグインから拡張するといいよ的なことも言っていた。

https://github.com/facebook/stylex/issues/47#issuecomment-1842656628

BaHoBaHo

サードパーティーで vite-plugin- を作ってくれている人がいた。(早い)

https://github.com/HorusGoul/vite-plugin-stylex

これなら Dev 環境に stylex のランタイムを差し込まなくてもプラグインがよしなに解決してくれる。もちろんファイルも。

BaHoBaHo

最終的には、プロジェクト立ち上げから

  1. @stylexjs/stylexvite-plugin-stylex のインストール
  2. vite.config.js の plugins に vite-plugin-stylex を追加

の2手順で動くようになった。

始めよう、stylex。

このスクラップは2024/05/23にクローズされました