この記事について
以下の条件を満たす時、アプリ側とstorybookのemotionの設定が異なっててめんどくさかったので自分なりの対処法を記事にしました。
- Next.jsでbabelを使いたくない
- storybookのビルダーがwebpackの場合
環境
ライブラリ | バージョン |
---|---|
Next.js | 13.3 |
storybook | 7.0.2 |
@emotion/react | 11.10.6 |
本題
突然ですがNext.js
でemotion
を動かす方法は現状2種類あります。
-
babel
を入れて@emotion/babel-preset-css-prop
を使う -
ts.config.js
で以下のように設定する
tsconfig.json
"compilerOptions": {
"jsxImportSource": "@emotion/react",
}
Next.js側とstorybook側の設定
Next側の設定
nextはswcを使っていたのでbabelを入れたくありません。よって2番目を使いました。
なぜtypescriptで設定できるかについてはこちらの記事をどうぞ
storybook側の設定
できれば同じようにtsconfigからやりたかったのですが、StorybookConfig
のtypescript
のプロパティにjsxImportSource
がなかったので諦めました。
storybookには元々babel/coreが入ってるということで以下のような設定でプラグインをいれたら動きました。
$ npm install --save-dev @emotion/babel-preset-css-prop
.storybook/main.ts
import type { StorybookConfig } from '@storybook/nextjs'
import path from 'path'
const config: StorybookConfig = {
// 中略
babel: async (options) => {
options.presets?.push('@emotion/babel-preset-css-prop')
return options
},
}
export default config
感想
ちなみに、storybook
のビルダーをvite
にする場合はtsconfig.tsと同じように設定できるらしいです。