1
0

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.

0から作るUXPin Merge + TypeScript + Storybookの環境 その3

Last updated at Posted at 2021-11-22

これは何

Emotionを使う準備

ライブラリのインストール

まずはこちらのコマンド。

ターミナル
yarn add -D @emotion/react

Emotionにはstyled-component記法でスタイルを書くための@emotion/styledもありますが、筆者がstyled-component記法をあまり好まないためこの記事では省略しています。

JSX Pragmaを省略するために

ターミナル
yarn add -D @emotion/babel-preset-css-prop
diff_json:tsconfig.json
  {
    "compilerOptions": {
      "target": "es5",
      "module": "commonjs",
      "esModuleInterop": true,
      "forceConsistentCasingInFileNames": true,
      "strict": true,
      "skipLibCheck": true,
-     "jsx": "react"
+     "jsx": "react-jsx",
+     "jsxImportSource": "@emotion/react"
    }
  }
.storybook/main.js
  module.exports = {
    stories: [
      "../stories/**/*.stories.mdx",
      "../stories/**/*.stories.@(js|jsx|ts|tsx)",
    ],
    addons: [
      "@storybook/addon-links",
      "@storybook/addon-essentials",
      "storybook-css-modules-preset",
    ],
+   babel: async (options) => ({
+     ...options,
+     presets: [...options.presets, "@emotion/babel-preset-css-prop"],
+   })
  }

上記の設定はしなくても動くのですが、そうするとtsxファイルの先頭に毎回

SomeComponent.tsx
/** @jsxImportSource @emotion/react */

と記載しないといけなくなってしまいます(JSXプラグマというもので、詳しくはこちらをご覧ください

毎回書くのは地味に面倒ですし、うっかり忘れて動かなくなることもあるので対策しておくためのコードでした。

2021年11月現在、実はEmotion公式は@emotion/babel-preset-css-propではなく@emotion/babel-pluginを推奨しているのですがStorybookで上手く動いてくれませんでした。そのためこの記事では@emotion/babel-preset-css-propを使用しています。

Emotionを使う

ここまで来たら各コンポーネントのスタイル指定をCSS Modulesの記法からEmotion式に変えるだけでOKです。

こんな記事を書いておいて何ですが、実はEmotionを使うにあたりUXPin自体の設定変更は必要ありません笑
ただ、自分が導入しようと思ったときは「実質セット」であるStorybook側の設定に色々悩まされたのでこのタイトルで記事を投稿しています。

お片付け

前回導入したCSS Modules用の記述がいくらか残っていますので綺麗にします

uxpin.webpack.config.js
  ...
  module: {
    rules: [
      {
        loader: ['babel-loader', 'ts-loader'],
        test: /\.tsx$/,
        exclude: /node_modules/
      },
-     {
-       test: /\.css$/,
-       use: [
-         {
-           loader: 'style-loader',
-         },
-         {
-           loader: 'css-loader',
-           options: {
-             importLoaders: 2,
-             modules: true
-           },
-         },
-       ],
-     },
    ]
  }
  ...

`diff_javascript:.storybook/main.js
...
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",

  • "storybook-css-modules-preset",
    ],
    ...
ターミナル
yarn remove @types/css-modules css-loader storybook-css-modules-preset style-loader

あとはmodule.cssファイルを消せばOKです。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?