この記事の概要
つい最近@emotion/reactで自動付与されるベンダープレフィックスを外すという記事を書きました。
すると「あの記事を参考にしたけど@emotion/coreでは動かなくて、どうしたら良いだろう?」と話をもらったのでそちらのバージョンでも試してみました。
前提となる挙動や問題点は@emotion/react版の記事に書いてありますので、まずはそちらを読んでいただけると幸いです。
@emotion/reactと@emotion/coreとは
Emotionがv10からv11に上がる際に名前が変わりました。
@emotion/core
が@emotion/react
にリネームされたのに加え、emotion-theming
というパッケージが@emotion/react
の中に統合されました。
結論: createCacheの指定を変える
const myCache = createCache({
- key: 'css',
- stylisPlugins: [],
+ prefix: false,
})
@emotion/react
ではstylisPlugins
にprefixer
が使用されていたため、その指定を明示的に外せばOKでした。
一方@emotion/core
ではstylisPlugins
にデフォルト値は用意されていません。
代わりにprefix
というプロパティがあるので、そちらにfalse
を渡せばOKです。
また、@emotion/react
ではデフォルトの値が無いため指定しなければならなかったkey
も、@emotion/core
ではデフォルトとしてcss
が指定されているため消してOKです。
時系列で言えば逆(prefix
が存在していたけど途中で無くなった、key
のデフォルト値が存在していたけどなくなった)のですが、前回の記事を基準に書いています。
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import { CacheProvider } from '@emotion/core'
import createCache from '@emotion/cache'
const myCache = createCache({
prefix: false,
})
const rootNode = document.getElementById('root')
ReactDOM.render(
<CacheProvider value={myCache}>
<App />
</CacheProvider>,
rootNode,
)
これにより、ベンダープレフィックスがつかなくなりました。
実態は@emotion/coreというより@emotion/cacheの変更
@emotion/core
としての最新バージョンは10.3.1
で、このとき@emotion/cache
の10.0.29
が依存関係としてインストールされます。
この時点ではまだprefix
があります。
@emotion/react
としての最古バージョンは11.0.0
で、このとき@emotion/cache
の11.10.5
が依存関係としてインストールされます。
この時点でprefix
は存在していません。
「@emotion/core
だから動かない」というよりは「@emotion/core
と@emotion/react
で、使う@emotion/cache
の中身が変わっているため、書き方を変える必要がある」という方が実態に即していそうです。
最後に
時系列を遡って調査をした身としては「prefix
オプションがある方が楽だなあ」と感じています。
アップデートの結果なくなっているのですから、パフォーマンス的に良くないとか、メンテがしづらいとか、理由はあるのでしょうが……。
あと前回の記事とあわせてですが、ベンダープレフィックスを完全に無しにするのも強硬手段なので、browserlistなどにあわせて生成できると嬉しい気持ちがあります。
おまけですが、v10(@emotion/core
)のドキュメントも割と遡りやすかったのが助かりました。
最後まで読んでくださってありがとうございます!
Twitterでも情報を発信しているので、良かったらフォローお願いします!
Devトークでのお話してくださる方も募集中です!