λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’‘ issue

storybook μ—μ„œ styled component css prop 적용이 μ•ˆλœλ‹€λ©΄?

by HandHand 2023. 5. 15.

 

πŸ’‘ 문제 ν˜„μƒ

μ‹€ν–‰ ν™˜κ²½

Next 13
Storybook 7.0.4
Styled component: 5.3.10

 

Next.js 13 μ—μ„œ μŠ€ν† λ¦¬λΆμ„ λΉŒλ“œν•œ κ²°κ³Ό, styled-component 의 css-prop 이 μ˜¬λ°”λ₯΄κ²Œ μ μš©λ˜μ§€ μ•ŠλŠ” μ΄μŠˆκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

πŸ€” 원인은?

 

 

기본적으둜 css-prop 을 μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλŠ” babel 을 ν†΅ν•΄μ„œ λΉŒλ“œκ°€ μ΄λ€„μ§€λŠ”λ°, Next.js 12 λΆ€ν„°λŠ” babel λŒ€μ‹ μ— swc 둜 λΉŒλ“œν•˜κΈ° λ•Œλ¬Έμ—, λ¬Έμ œκ°€ 생긴 λ“― λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

ν˜Ήμ‹œλ‚˜ ν•΄μ„œ κ΄€λ ¨λœ 이슈λ₯Ό μ°Ύμ•„λ³΄λ‹ˆ, 아직 ν™œλ°œν•˜κ²Œ λ…Όμ˜λ˜κ³  μžˆλŠ” μƒνƒœμ˜€μŠ΅λ‹ˆλ‹€.

 

https://github.com/vercel/next.js/issues/30802

 

Port babel-plugin-styled-components to SWC · Issue #30802 · vercel/next.js

This Babel plugin is the most used customization of .babelrc. The plugin is split up in multiple separate transforms: https://github.com/styled-components/babel-plugin-styled-components/blob/a26774...

github.com

 

βœ… ν•΄κ²° 방법

μš°μ„  ν•΄λ‹Ήμ΄μŠˆκ°€ 각 νŒ¨ν‚€μ§€μ˜ λ©”μΈν…Œμ΄λ„ˆλ₯Ό 톡해 근본적으둜 ν•΄κ²°λ˜κΈ° μ „κΉŒμ§€ λ‹€μŒ 방법을 μ‚¬μš©ν•©λ‹ˆλ‹€.

babel 을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  Next.js 13 κ³Ό λ™μΌν•˜κ²Œ swc 컴파일러λ₯Ό μ΄μš©ν•΄μ„œ λΉŒλ“œν•©λ‹ˆλ‹€.

두 가지 νŒ¨ν‚€μ§€λ₯Ό ν™œμš©ν•˜λ©΄ λ˜λŠ”λ°, ν•˜λ‚˜λŠ” storybook μ—μ„œ swc λ₯Ό μ΄μš©ν•΄μ„œ λΉŒλ“œ ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” νŒ¨ν‚€μ§€μ΄κ³  λ‹€λ₯Έ ν•˜λ‚˜λŠ” swc μ—μ„œ styled component 을 μ˜¬λ°”λ₯΄κ²Œ 해석할 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” ν”ŒλŸ¬κ·ΈμΈμž…λ‹ˆλ‹€.

 

1️⃣ νŒ¨ν‚€μ§€ μ„€μΉ˜

> npm i -D storybook-addon-swc @swc/plugin-styled-components

 

2️⃣ swc 및 plugin μ„€μ •

// .storybook/main.ts

const config: StorybookConfig = {
  addons: [
        // βœ… plugin 을 μΆ”κ°€ν•©λ‹ˆλ‹€.
    {
      name: 'storybook-addon-swc',
      options: {
        swcLoaderOptions: {
          jsc: {
            experimental: {
              plugins: [['@swc/plugin-styled-components', {}]],
            },
          },
        },
      },
    },
  ],

    // ... other settings
}

μœ„ 섀정을 마치고 swc 둜 μŠ€ν† λ¦¬λΆμ„ λΉŒλ“œν•˜λ©΄, css-prop 을 μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ“€μ„ λ¬Έμ œμ—†μ΄ λ Œλ”λ§ν•©λ‹ˆλ‹€.

 

✏️ λ²ˆμ™Έ

swc 둜 λΉŒλ“œν•˜λ‹ˆ storybook λΉŒλ“œ 속도가 기쑴보닀 2λ°° 정도 λΉ¨λΌμ‘ŒμŠ΅λ‹ˆλ‹€.

덕뢄에 ci μ‹€ν–‰μ‹œκ°„λ„ 쀄일 수 있μ—ˆλ„€μš”! πŸ˜€

 

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€