Next.js: normalize.css๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 12์›” 08์ผ  ยท  27์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vercel/next.js

normalize.css(์ด์ƒ์ ์œผ๋กœ๋Š” NPM์—์„œ)๋ฅผ ์„ฑ๋Šฅ์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ •์  ์ž์‚ฐ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์•ฝ๊ฐ„์˜ CSS์— ๋Œ€ํ•œ ํ—ค๋” ์š”์ฒญ์„ ๋„์ž…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Glamour์—๋Š” glamor/reset ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ normalize๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋ฉฐ ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค(์–ด์จŒ๋“  ๋‹ค์Œ๋ถ€ํ„ฐ Glamour์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค).

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

@jaydenseric Normalize.css๊ฐ€ CSS์˜ jQuery๋ผ๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์—ฌ์ „ํžˆ HTML ์š”์†Œ์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์—์„œ ์ƒ๋‹นํžˆ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. Normalize.css๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Normalize.css๋Š” ์ตœ์‹  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

next/head ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@nkzawa next/head ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๊ธ€๋กœ๋ฒŒ syles๋ฅผ ๋กœ๋“œํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ์— css-loader ๊ฐ€ ์—†์œผ๋ฉด $#$2 node_modules #$์—์„œ CSS ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์ธก์—์„œ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ํ—ค๋” ์š”์ฒญ์— ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ถ€ํ’€๋ ค ์ค๋‹ˆ๊นŒ?

๋‹ค์Œ๊ณผ ๊ฐ™์ด style ๋ฅผ next/head ์˜ ํ…์ŠคํŠธ๋กœ ์ •์˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

<Head>
  <style>{`
    body {
      margin: 0;
    }
  `}</style>
</Head>

normalize.css ์„ .json ๋กœ ๋˜๋Š” ๊ตฌ์„ฑ์š”์†Œ๋ฅผ require ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ํ˜„์žฌ IMO์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํŽ˜์ด์ง€์— ํŒŒ์ผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฒญํฌ๋กœ ๋ฒˆ๋“ค๋˜๊ณ  ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋ถ€ํ’€๋ ค์ง€์ง€ ์•Š๋„๋ก ํ•œ ๋ฒˆ๋งŒ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

https://github.com/zeit/next.js/pull/222 ๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์„ ๋•Œ css-loader ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒƒ์ด์—ˆ์ง€๋งŒ ํ˜„์žฌ ๋” ์ž๋™์œผ๋กœ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. Webpack ๋˜๋Š” Gulp๋ฅผ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜์—ฌ ๋‹ค์Œ์— ํžˆํŠธํ•˜๊ธฐ ์ „์— ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  next๊ฐ€ ๊ณตํ†ต ์ฒญํ‚น์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋จธ๋ฆฌ์— ๋ฌผ๊ฑด์„ ๋ฐ€์–ด ๋„ฃ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ธฐ๋ถ„์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚ด ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

2016๋…„ 12์›” 9์ผ 01:11์— Naoyuki Kanezawa [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค์Œ/ํ—ค๋“œ์˜ ํ…์ŠคํŠธ๋กœ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.




normalize.css๋ฅผ .json ๋˜๋Š” ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ํ˜„์žฌ IMO์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํŽ˜์ด์ง€์— ํŒŒ์ผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฒญํฌ๋กœ ๋ฒˆ๋“ค๋˜๊ณ  ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋ถ€ํ’€๋ ค์ง€์ง€ ์•Š๋„๋ก ํ•œ ๋ฒˆ๋งŒ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

#222๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์„ ๋•Œ css-loader๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

โ€”
์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์„ธ์š”.

glamour๋Š” v3.0.2์˜ ์˜ค๋ž˜๋œ ๋ฒ„์ „์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ normalize.css ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
https://github.com/threepointone/glamor/blob/master/src/reset.js

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ–ˆ๋‹ค
https://github.com/threepointone/glamor/pull/154

import 'glamor/reset' ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

5.0์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ pull ์š”์ฒญ์ด ๋ณ‘ํ•ฉ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋‚ด ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. :)

@FrancosLab ํŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! glamor/reset ๋ฅผ ๋งŒ๋‚ฌ์ง€๋งŒ normalize๊ฐ€ ๊ทธ ์ผ๋ถ€๋ผ๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. Glamour์˜ README์— ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ™๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

[email protected] ์— ๋Œ€ํ•ด ์ง€๊ธˆ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šด์ด ์—†์ด with-global-stylesheet ์˜ˆ์ œ๋กœ ์ˆ˜ํ–‰๋œ ์ž‘์—…์„ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋ ค๊ณ  ์—ฌ๋Ÿฌ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

normalize.css ๋Š” ํŒจํ‚ค์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Node์˜ require resolution์€ package.main ์‚ฌ์šฉ). ๊ฒŒ๋‹ค๊ฐ€ emit-file-loader (๊ทธ๋ฆฌ๊ณ  file-loader ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)๋Š” ์˜ˆ์ œ ์ €์žฅ์†Œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. name=dist/[path][name].[ext] ์˜ต์…˜์„ ๋กœ๋”์— ์ „๋‹ฌํ•  ๋•Œ path ๋Š” ํ•ญ์ƒ - ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ํŒŒ์ผ์ด .next/dist/-/node_modules/normalize.css/normalize.css ์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. .

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์ฒด normalize.css ํŒŒ์ผ์„ static ํด๋”์— ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์ „์ฒด๋ฅผ style ํƒœ๊ทธ์— ์ธ๋ผ์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•ด).

webpack-copy-plugin ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์ง€๋งŒ static ํด๋”๊ฐ€ .next ์—์„œ ์ œ๊ณต๋˜์ง€ ์•Š๊ณ  ์‹ค์ œ๋กœ๋Š” ๋ฃจํŠธ ํด๋” ์ž์ฒด <root-folder>/static (์—ฌ๊ธฐ์„œ pages ์ƒํ™œ) ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด์ œ Next.js๋Š” Glamour์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•œ ํŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ๊ด€๋ จ: https://github.com/zeit/styled-jsx/issues/83 , https://github.com/zeit/styled-jsx/pull/100 , https://github.com/zeit/ next.js/issues/544

with-global-stylesheet ์˜ˆ์ œ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: #1327!

1327 ์€ import 'normalize.css' ์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ž‘์—…์—์„œ๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ฌธ์ œ๋Š” Webpack์ด ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ์—์„œ non-js ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@migueller ๋Š” v2.0 ์ดํ›„ ๋ฒ”์šฉ Webpack์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...: https://github.com/zeit/next.js/issues/1245

@sedubois , ๊ฐ„์ ˆํžˆ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜„

๊ฑฐ๊ธฐ์— ํˆฌํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰

์—ฌ๋Ÿฌ๋ถ„, ๋ฐฉ๊ธˆ ๋ณ‘ํ•ฉ๋œ includePaths ์—†์ด๋„ sass-loader normalize ๋ฅผ ์ž˜ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. normalize-scss ( normalize.css ์˜ Sass ํฌํŠธ)๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ(custom _document , ๋ ˆ์ด์•„์›ƒ ๋˜๋Š” ํŽ˜์ด์ง€)์— <strong i="10">@import</strong> '~normalize-scss'; ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. with-global-stylesheet ๋ฐฉ์‹์œผ๋กœ $ scss ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์›๋ณธ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  babel-plugin-module-resolver #$๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ„์นญ์„ node_modules ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ styles ๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ js๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + <style dangerouslySetInnerHTML={{ __html: normalize }} /> .

@orlin , Webpack์„ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— JS๋กœ ๊ฐ„๋‹จํžˆ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@migueller , with-global-stylesteet ์˜ˆ์ œ์˜ js ์—์„œ scss ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. css ๋ฐ scss ๋ชจ๋‘ next.config.js ์—์„œ Webpack ๋กœ๋”์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๊ณ  js๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. normalize.css ๋ฅผ ์„ค์น˜ํ•˜๊ณ  babel-plugin-module-resolver ๋ณ„์นญ์„ ์„ค์ •ํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ... ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฏ€๋กœ import normalize from '...' ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@orlin ,

์˜ˆ์ œ๋ฅผ ๋ณต์ œํ•˜๊ณ  normalize.css ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์กฐ๊ธˆ ๊ฐ€์ง€๊ณ  ๋†€์•˜์Šต๋‹ˆ๋‹ค. ๋‹น์‹  ๋ง์ด ๋งž์•„, ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ package.json ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š์œผ๋ฉด Node์˜ require ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ์ถœ๋œ ํŒŒ์ผ์˜ ์ถœ๋ ฅ ์ด๋ฆ„์ด dist/[path]index.js ์ธ ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. require ์€(๋Š”) ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํƒ€์ผ( node_modules ์ด ์•„๋‹Œ ์†Œ์Šค ์ฝ”๋“œ์— ์žˆ๋Š”)์— ๋Œ€ํ•ด ์ด ๋™์ž‘์„ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— normalize.css(๋ฐ ์‚ฌ์šฉ ์ค‘์ธ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ํฌํ•จ)์— ๋Œ€ํ•ด์„œ๋งŒ Webpack ๊ทœ์น™์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ๊ธฐ ์ˆ˜์ •์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ #1245 ๋ฐ https://github.com/zeit/styled-jsx/pull/100#issuecomment ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฆ‰์‹œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. -277133969

@rauchg , node_modules ์— ์กด์žฌํ•˜๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์€ ์•„์ด๋””์–ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ƒˆ๋กœ์šด ์˜ˆ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ with-global-stylesheet ํ•˜๋‚˜๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@migueller ๋ฅผ ๋™์ผํ•œ ์˜ˆ์ œ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋งˆ๋„ ๋ฐ”๋žŒ์งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@migueller ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋งค์šฐ ๊นจ๋—ํ•œ "๋ชจ๋ฒ” ์‚ฌ๋ก€" ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. with-global-stylesheet ์— ๋Œ€ํ•œ PR์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ... ํ•ดํ‚น์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

์žฌ์„ค์ • ๋˜๋Š” ์ •๊ทœํ™”๋ฅผ ํฌํ•จํ•œ ์ „์—ญ ์Šคํƒ€์ผ์€ ์–ด์จŒ๋“  ์•ˆํ‹ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ณ ์œ ํ•œ ์Šคํƒ€์ผ์„ ์ œ์–ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Normalize๋Š” CSS์˜ jQuery์ž…๋‹ˆ๋‹ค.

@jaydenseric Normalize.css๊ฐ€ CSS์˜ jQuery๋ผ๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์—ฌ์ „ํžˆ HTML ์š”์†Œ์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์—์„œ ์ƒ๋‹นํžˆ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. Normalize.css๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Normalize.css๋Š” ์ตœ์‹  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. (https://github.com/zeit/next.js/#custom-document)

// ./pages/_document.js
import Document, { Head, Main, NextScript } from 'next/document'
import flush from 'styled-jsx/server'

export default class MyDocument extends Document {
  static getInitialProps({ renderPage }) {
    const { html, head, errorHtml, chunks } = renderPage()
    const styles = flush()
    return { html, head, errorHtml, chunks, styles }
  }

  render() {
    return (
      <html>
        <Head>
          <title>My page</title>
          <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css" />
        </Head>
        <body className="custom_class">
          {this.props.customValue}
          <Main />
          <NextScript />
        </body>
      </html>
    )
  }
}

@vinzcelavi ์™œ ์Šคํƒ€์ผ์„ ํ”Œ๋Ÿฌ์‹œํ•ฉ๋‹ˆ๊นŒ?

@sospedra ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ฌ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/zeit/styled-jsx#styled -jsxserver

์•„๋งˆ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ์— ๋”ฐ๋ผ Document.getInitialProps ๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค: https://github.com/zeit/next.js/#custom -document

Head ๋‚ด๋ถ€์— CDN URL๊ณผ ํ•จ๊ป˜ link ํƒœ๊ทธ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์™œ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

@janoist1 ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์™ธ๋ถ€ CDN์— ์˜์กดํ•˜๊ธฐ๋ณด๋‹ค ๋‹ค์Œ๋ถ€ํ„ฐ ์ •๊ทœํ™” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์™ธ๋ถ€์— ์˜์กดํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ next-css ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ต์…˜์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋จผ์ € normalize.css Head link ๋ฅผ ํฌํ•จ์‹œํ‚จ ๋‹ค์Œ <style type='text/css'>{globalStyles}</style> ๋ฅผ ํ†ตํ•ด ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ •์˜ ์ „์—ญ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

import React from 'react'
import Document, { Head, Main, NextScript } from 'next/document'

const globalStyles = `
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
`

export default class MyDocument extends Document {
  render () {
    return (
      <html>
        <Head>
          <meta name='viewport' content='width=device-width, initial-scale=1' />
          <meta charSet='utf-8' />

          <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css' />

          <style type='text/css'>{globalStyles}</style>
        </Head>

        <body>
          <Main />
          <NextScript />
        </body>
      </html>
    )
  }
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰