7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

完走賞を目指す @xrxoxcxoxAdvent Calendar 2022

Day 8

@emotion/coreで自動付与されるベンダープレフィックスを外す

Last updated at Posted at 2022-12-07

この記事の概要

つい最近@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ではstylisPluginsprefixerが使用されていたため、その指定を明示的に外せば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/cache10.0.29が依存関係としてインストールされます。
この時点ではまだprefixがあります。

@emotion/reactとしての最古バージョンは11.0.0で、このとき@emotion/cache11.10.5が依存関係としてインストールされます。
この時点でprefixは存在していません。

@emotion/coreだから動かない」というよりは「@emotion/core@emotion/reactで、使う@emotion/cacheの中身が変わっているため、書き方を変える必要がある」という方が実態に即していそうです。

最後に

時系列を遡って調査をした身としては「prefixオプションがある方が楽だなあ」と感じています。
アップデートの結果なくなっているのですから、パフォーマンス的に良くないとか、メンテがしづらいとか、理由はあるのでしょうが……。

あと前回の記事とあわせてですが、ベンダープレフィックスを完全に無しにするのも強硬手段なので、browserlistなどにあわせて生成できると嬉しい気持ちがあります。

おまけですが、v10(@emotion/core)のドキュメントも割と遡りやすかったのが助かりました。


最後まで読んでくださってありがとうございます!
Twitterでも情報を発信しているので、良かったらフォローお願いします!

Devトークでのお話してくださる方も募集中です!

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?