Gatsby: [v2] gatsby-plugin-jss์˜ ์ž ์žฌ์  ๋ฒ„๊ทธ: SheetsRegistry๋ฅผ ์ง€์›Œ์•ผ ํ•จ

์— ๋งŒ๋“  2018๋…„ 08์›” 29์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: gatsbyjs/gatsby

๊ธฐ์ˆ 

ํŠน์ • ์Šคํƒ€์ผ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€ ๊ฐ„์— SheetsRegistry๋ฅผ ์ง€์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ๋‹จ์ˆœํ™”๋œ ์žฌ์ƒ์‚ฐ์ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/cpboyd/gatsby-layout-mui-bug

์ฐธ๊ณ : SheetsRegistry ์žฌ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” ToString() ํ˜ธ์ถœ ํ›„์— ๋ฐฐ์น˜ํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ์œ„์น˜์— ๋ฐฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ

ํŽ˜์ด์ง€๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ Œ๋”๋ง๊ณผ ์ •์  ๋ Œ๋”๋ง ๊ฐ„์— ์ผ๊ด€๋˜๊ฒŒ ๋ Œ๋”๋ง๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ๊ฒฐ๊ณผ

์Šคํƒ€์ผ์ด ๋’ค์ฃฝ๋ฐ•์ฃฝ์ด์—ˆ๋‹ค.

ํ™˜๊ฒฝ

์ฒด๊ณ„:
OS: macOS ํ•˜์ด ์‹œ์—๋ผ 10.13.6
CPU: x64 Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
์…ธ: 3.2.57 - /bin/bash
๋ฐ”์ด๋„ˆ๋ฆฌ:
๋…ธ๋“œ: 10.9.0 - /usr/local/bin/node
์›์‚ฌ: 1.9.4 - /usr/local/bin/yarn
npm: 6.4.0 - /usr/local/bin/npm
๋ธŒ๋ผ์šฐ์ €:
ํฌ๋กฌ: 68.0.3440.106
์‚ฌํŒŒ๋ฆฌ: 11.1.2
npmํŒจํ‚ค์ง€:
๊ฐœ์ธ ๋น„: ^2.0.0-rc.0 => 2.0.0-rc.0
๊ฐœ์ธ ๋น„ ์ด๋ฏธ์ง€: ^2.0.0-rc.0 => 2.0.0-rc.0
gatsby-plugin-google-analytics: ^2.0.0-rc.0 => 2.0.0-rc.0
gatsby-plugin-jss: ^2.0.2-rc.0 => 2.0.2-rc.0
๊ฐœ์ธ ๋น„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ ˆ์ด์•„์›ƒ: ๋‹ค์Œ => 1.0.0-rc.0
๊ฐœ์ธ ๋น„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ: ^2.0.2-rc.0 => 2.0.2-rc.0
gatsby ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜คํ”„๋ผ์ธ: ^2.0.0-rc.0 => 2.0.0-rc.0
gatsby-plugin-react-helmet: ^3.0.0-rc.0 => 3.0.0-rc.0
gatsby-plugin-sharp: ^2.0.0-rc.0 => 2.0.0-rc.0
gatsby-plugin-typescript: ^2.0.0-rc.0 => 2.0.0-rc.1
gatsby-plugin-typography: ^2.2.0-rc.0 => 2.2.0-rc.0
gatsby-remark-external-links: ^0.0.4 => 0.0.4
gatsby-remark-images: ^2.0.1-rc.0 => 2.0.1-rc.0
gatsby-remark-responsive-iframe: ^2.0.0-rc.0 => 2.0.0-rc.0
๊ฐœ์ธ ๋น„ ์†Œ์Šค ํŒŒ์ผ ์‹œ์Šคํ…œ: ^2.0.1-rc.0 => 2.0.1-rc.0
gatsby-transformer-json: ^2.1.1-rc.0 => 2.1.1-rc.0
gatsby-transformer-remark: ^2.1.1-rc.0 => 2.1.1-rc.0
๊ฐœ์ธ ๋น„ ํŠธ๋žœ์Šคํฌ๋จธ ์ƒคํ”„: ^2.1.1-rc.0 => 2.1.1-rc.0
npmGlobalํŒจํ‚ค์ง€:
๊ฐœ์ธ ๋น„-cli: 1.1.58

ํŒŒ์ผ ๋‚ด์šฉ(๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ)

gatsby-config.js : ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
package.json : ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
gatsby-node.js : ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
gatsby-browser.js : ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ

์›๋ž˜ gatsby-ssr.js API๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด SheetsRegistry ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

exports.replaceRenderer = (
  { bodyComponent, replaceBodyHTMLString, setHeadComponents },
  { theme = {} }
) => {
  const sheets = new SheetsRegistry()

  const bodyHTML = renderToString(
    <JssProvider registry={sheets}>
      <ThemeProvider theme={theme}>{bodyComponent}</ThemeProvider>
    </JssProvider>
  )

  replaceBodyHTMLString(bodyHTML)
  setHeadComponents([
    <style
      type="text/css"
      id="server-side-jss"
      key="server-side-jss"
      dangerouslySetInnerHTML={{ __html: sheets.toString() }}
    />,
  ])
}

์ด์ œ ๋ณ€์ˆ˜๋Š” ํŒŒ์ผ ๋ฒ”์œ„์ด๋ฉฐ ๋ Œ๋”๋ง ์ „๋ฐ˜์— ๊ฑธ์ณ ์ง€์†๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import React from "react"
import { JssProvider, SheetsRegistry, ThemeProvider } from "react-jss"

const sheets = new SheetsRegistry()

// eslint-disable-next-line react/prop-types,react/display-name
exports.wrapRootElement = ({ element }, { theme = {} }) => (
  <JssProvider registry={sheets}>
    <ThemeProvider theme={theme}>{element}</ThemeProvider>
  </JssProvider>
)

exports.onRenderBody = ({ setHeadComponents }) => {
  setHeadComponents([
    <style
      type="text/css"
      id="server-side-jss"
      key="server-side-jss"
      dangerouslySetInnerHTML={{ __html: sheets.toString() }}
    />,
  ])

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹น์‹ ์ด ๋งž์Šต๋‹ˆ๋‹ค. setHeadComponents ๋ฅผ wrapRootElement ํ•ด์•ผ SheetsRegistry ๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜ ๋ฒ”์œ„ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ „() ๋‹จ์ผ ๊ธ€๋กœ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋Œ€์‹ .

>๋ชจ๋“  ๋Œ“๊ธ€

๋‹น์‹ ์ด ๋งž์Šต๋‹ˆ๋‹ค. setHeadComponents ๋ฅผ wrapRootElement ํ•ด์•ผ SheetsRegistry ๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜ ๋ฒ”์œ„ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ „() ๋‹จ์ผ ๊ธ€๋กœ๋ฒŒ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋Œ€์‹ .

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰