LoginSignup
13
3

More than 3 years have passed since last update.

Next.js v10でTypeScriptを使いつつEmotion v11を使おうとしたら5時間も解決しなかった話

Last updated at Posted at 2020-12-30

これは何

  • タイトルにあるように、5時間もハマってしまいました
  • 一応解決出来たので備忘録として残しています

使用しているパッケージの情報

名前 バージョン
next 10.0.1
react 17.0.1
typescript 4.0.5
@emotion/react 11.1.1
@emotion/babel-plugin 11.0.0

JSX Pragmaが動かない

事象

  • インストールの記事などには/** @jsx jsx */という記述が紹介されている
  • しかしそのままだとコンソールエラーが出た

解決策

  • /** @jsxImportSource @emotion/react */という記述にする
    • CSS Propの詳細な説明のページに記載されている
    • Reactのバージョンが新しくて(v17)JSXのランタイムの方式が違っていたため、従来の記述からは変える必要があった

Babelの設定が上手く働かない

前提

  • 新しいJSX Pragmaが動くようにはなったものの、毎回書くのは面倒
  • Babelの設定をしてJSX Pragmaの記載無しで動くようにしたい

事象

@emotion/babel-preset-css-propを使ってもJSX Pragma無しだと動かなかった

解決策

  • @emotion/babel-preset-css-propの代わりに@emotion/babel-pluginを入れつつ、.babelrcを以下のようにしたら動いた
.babelrc
{
  "presets": [
    [
      "next/babel",
      {
        "preset-react": {
          "runtime": "automatic",
          "importSource": "@emotion/react"
        }
      }
    ]
  ],
  "plugins": ["@emotion/babel-plugin"]
}

動くは動くけど、型定義がなくて怒られる

事象

  • スタイル自体は当てられるけどエディタ上でエラーが出ている
    • インストールしただけだとEmotionの型定義ファイルが無かった

解決策

next-env.d.ts
/// <reference types="@emotion/react/types/css-prop" />

まとめ

  • 過去にEmotionを適用したリポジトリを見ながら、ただ真似るだけで設定していたのが良くなかった
  • 公式ドキュメントをしっかり読むのはやっぱり大事
13
3
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
13
3