Next.js: ๊ฐœ๋ฐœ ์ค‘ ํƒ์ƒ‰ ํ•  ์ˆ˜ ์—†์Œ (๋ผ์šฐํ„ฐ๊ฐ€ ์ž ์‹œ ํ›„ ์ค‘๋‹จ๋จ)

์— ๋งŒ๋“  2018๋…„ 11์›” 05์ผ  ยท  50์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vercel/next.js

๋ฒ„๊ทธ ์‹ ๊ณ 

๋ฒ„๊ทธ ์„ค๋ช…

ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์šฐํŒ…์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ Link ๋˜๋Š” Router ๊ฐ€ ์ž‘๋™์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. HMR์ด ํŽ˜์ด์ง€ ๊ฐ„ ์ „ํ™˜์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์œ ํœด ์ƒํƒœ์ด๊ฑฐ๋‚˜ ์ž ์‹œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์žˆ์„ ๋•Œ ๊ฐ€์žฅ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (์œ ํœด ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ณณ์„ ํด๋ฆญํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์ง€๋งŒ).

์žฌํ˜„ํ•˜๋ ค๋ฉด

๋™์ž‘์„ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„, ์ฝ”๋“œ ์กฐ๊ฐ ๋˜๋Š” ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  1. ์ด ์ €์žฅ์†Œ ๋ณต์ œ (https://github.com/malimccalla/next-routing-issue)
  2. ์ข…์†์„ฑ ์„ค์น˜ npm install
  3. npm run dev ์„œ๋ฒ„ ์‹คํ–‰
  4. ๋งํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค.
  5. ์ปคํ”ผ๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค (ํŽ˜์ด์ง€๋ฅผ 2 ๋ถ„ ๋™์•ˆ ์œ ํœด ์ƒํƒœ๋กœ ๋‘์‹ญ์‹œ์˜ค).
  6. ๋งํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜์‹ญ์‹œ์˜ค.
  7. ํŠน์ • ๋งํฌ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๐Ÿ˜”

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

๋ชจ๋“  ๊ฐœ๋ณ„ ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธ ํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

ํŽ˜์ด์ง€๊ฐ€ ํŠน์ • ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ ์ƒท

"์ •๋ณด"๋ฐ "์—ฐ๋ฝ์ฒ˜"๋งํฌ๊ฐ€ ๋ชจ๋‘ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๊ฐ ๊ฒฝ๋กœ์˜ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ HMR ๋กœ๊ทธ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค). ํŽ˜์ด์ง€ ์ƒˆ๋กœ ๊ณ ์นจ ํ›„ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ์•ฝ 2 ๋ถ„ ๋™์•ˆ ์•ฑ์„ ์œ ํœด ์ƒํƒœ๋กœ๋‘๋ฉด ๋ฌธ์ œ๋กœ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

next-issue

์‹œ์Šคํ…œ ์ •๋ณด

  • ๋งฅ ๋ชจํ•˜๋น„ 10.14
  • ํฌ๋กฌ
  • next.js v7.0.2

์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ

์ฝ˜์†”์ด ์—ด๋ฆฌ๋ฉด ๋ผ์šฐํ„ฐ ์ด๋ฒคํŠธ routeChangeStart ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ routeChangeComplete ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ง€๊ธˆ์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋‹ค

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋„์ด ๋ฌธ์ œ๋ฅผ๋ณด๊ณ  ์žˆ์œผ๋ฏ€๋กœ HMR์ด ๋ฌธ์ œ์˜ ์œ ์ผํ•œ ์›์ธ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@ernerock ์œ„์˜ ์˜ˆ๋ฅผ ์—ฌ๊ธฐ์— ๋ฐฐํฌํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ผ๋‹จ ๋ผ์ด๋ธŒ๋กœ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

@malimccalla ๋‚ด ๋ฌธ์ œ๊ฐ€ ๊ท€ํ•˜์™€ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™์ง€๋งŒ ํƒ์ƒ‰ ๋™์ž‘์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํƒ์ƒ‰ํ•˜๋Š” ํŽ˜์ด์ง€์— CSS ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ

import 'react-alice-carousel/lib/alice-carousel.css';

ํƒ์ƒ‰ ๋™์ž‘์€ ๊ท€ํ•˜๊ฐ€๋ณด๊ณ  ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. '@ zeit / next-css'์˜ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# 5291์—์„œ ์ด๋ฏธ๋ณด๊ณ  ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ _app.js์—์„œ CSS ํŒŒ์ผ์„ ๊ฐ€์ ธ ์™€์„œ ๋น„์›Œ๋‘๋ฉด ์ผ์‹œ์ ์œผ๋กœ 'ํ•ด๊ฒฐ'ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ernerock ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค, ๊ทธ๋“ค์€ ์–ด๋–ค ๋กœํ„ฐ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ จ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์—ฌ๊ธฐ์—์„œ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ํŽ˜์ด์ง€๊ฐ€ / home ๋ฐ / home / subpage๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ Router.push๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ / home์—์„œ / home / subpage๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ withRouter HOC ๋˜๋Š” Link๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. / home์˜ ์ด๋ฆ„์„ / home / welcome์œผ๋กœ ๋ฐ”๊พธ๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์œ„์—์„œ ์„ค๋ช…ํ•œ ์‚ฌ๋ก€๊ฐ€ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ maciej-ka ์•„ ์˜ˆ, push ์—์„œ๋„ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Link ๋ฟ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ œ๋ชฉ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

@timneutkens @ ๋‹น์‹ ์—๊ฒŒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ๋ˆˆ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šด์—†์ด ์ผ์ฃผ์ผ ๋™์•ˆ ๊ทธ๊ฒƒ์˜ ๋ฐ”๋‹ฅ์— ๋„๋‹ฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ณ  ๊ทธ๊ฒƒ์€ ์ •๋ง๋กœ ๊ฐœ๋ฐœ์„ ๋ฐฉํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜จ ๋””๋งจ๋“œ ์ž…๋ ฅ ๋ฐ ํ๊ธฐ์™€ ๊ด€๋ จ์ด์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•ฝ๊ฐ„ ํŒŒ๊ณ  ๋“ค์—ˆ๊ณ  ํŽ˜์ด์ง€๊ฐ€ ํ๊ธฐ๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋กœ๊ทธ ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ํ๊ธฐ ๋œ ํŽ˜์ด์ง€๋ฅผ ๋” ์ด์ƒ ํƒ์ƒ‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

> Disposing inactive page(s): /

์˜ค๋Š˜ ๋ฐค์— ์ข€ ๋” ์‹ฌ์ธต ๋ถ„์„์„ ํ•  ์‹œ๊ฐ„์ด ์žˆ๊ณ  PR์„ ์—ด์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. @timneutkens ์ดˆ๊ธฐ ํ†ต์ฐฐ๋ ฅ์„

๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ณ ์น˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ๊ด€๋ จ ํŒŒ์ผ์—์„œ ๋งŽ์€ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ๋ถˆํ–‰ํžˆ๋„ ๊ทธ ๋ฐ‘๋ฐ”๋‹ฅ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํŽ˜์ด์ง€๊ฐ€ ์‚ญ์ œ๋˜๊ธฐ ์ „์— ๊ธฐ๊ฐ„์„ ์—ฐ์žฅํ•˜๊ธฐ ์œ„ํ•ด next.config.js ์—์„œ์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  onDemandEntries: {
    // period (in ms) where the server will keep pages in the buffer
    maxInactiveAge: 25 * 1000,
    // number of pages that should be kept simultaneously without being disposed
    pagesBufferLength: 5,
  },

์ด ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ๋กœ / ๊ฒฝ๋กœ๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š๋Š”์ง€๋Š” ๋ฌด์ž‘์œ„์ด์ง€๋งŒ ๊ฒฐ๊ตญ ๋ชจ๋‘ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์„œ๋ฒ„ / ๋žŒ๋‹ค ๋ฌธ์ œ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ์กฐ์‚ฌ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ฃผ๋ฌธํ˜• ์ž…๋ ฅ๊ณผ ๊ด€๋ จ์ด์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์Šต๋‹ˆ๋‹ค.

๋„ค, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ๊ธฐ ํ›„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ €๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์ด ํ”„๋กœ๋•์…˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹˜์„ ํ™•์ธํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์ด ํ”„๋กœ๋•์…˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹˜์„ ํ™•์ธํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ์—์„œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ENV๋ฅผ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ๋ฐœ๊ณผ ํ”„๋กœ๋•์…˜ ๋ชจ๋‘์— ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋น„ํ™œ์„ฑ ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€ ๋“ฑ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dev์—์„œ ์„œ๋ฒ„ ์ฝ˜์†”
> Building page: /contact
WAIT Compling...
success client complied in 462ms
๊ทธ๋Ÿฌ๋‚˜ ํŽ˜์ด์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ํด๋ผ์ด์–ธํŠธ ์ฝ˜์†”์—์„œ :
[HMR] bundle rebuilding ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์„œ๋ฒ„ ์ฝ˜์†”์ด ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
Disposing of inactive page(s): /, /contact

๋ธŒ๋ผ์šฐ์ €์— mysite.com/contact๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
maxInactiveAge ๋ฐ pagesBufferLength ์ค‘ next.config.js ์—์„œ ์ž‘์—…์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

[๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‹จ์ง€ dev์— ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋žฌ๋‹ค]

ํŽธ์ง‘ : ๊ตฌ์„ฑ ์š”์†Œ์— import 'node-mod/dist/theme.css ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ _app.js ๋กœ ์˜ฎ๊ฒผ๊ณ  Link ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ, ์ฒ˜๋ฆฌ ํ›„ dev ๋ชจ๋“œ์—์„œ ๊ฒฝ๋กœ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๋ง ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค.

@roytsang "๊ฐ™์€ ๋ฌธ์ œ"๋ฅผ ๋งํ•˜๋Š” ๋Œ€์‹  ๋ฌธ์ œ์— ๐Ÿ‘๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๐Ÿ‘์—์„œ ์ •๋ ฌ ํ•  ๋•Œ +1 ๋งค๋‰ด์–ผ์ด ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. _app์—์„œ Head from next / head๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋ชฉ๊ณผ ํŒŒ๋น„์ฝ˜์„ ์ ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„ ์˜ค๋Š˜๋ถ€ํ„ฐ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@Atmospheres @malimccalla ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด

๋‚˜๋Š” ์•„์ง ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ์ง€ ์•Š์•˜์ง€๋งŒ ๊ณง ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์–ธ์ œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ์˜ค๋Š˜ ์•„์นจ์— ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์— ์ œ๊ฐ€ ๋ฐœ๊ฒฌ ํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์ œ ๋ฌธ์ œ๊ฐ€ ์‹œ์ž‘ ๋๊ณ , ๋‚ด๊ฐ€ ๊ตฌํ˜„ ํ•œ ์œ ์ผํ•œ ์ƒˆ๋กœ์šด ๊ฒƒ์€ ๋‹ค์Œ์˜ ํ—ค๋“œ์ž…๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์„๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” _document์˜ ํ—ค๋“œ๋ฅผ Head๋กœ ๋ณ€๊ฒฝํ–ˆ์Œ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Head๋ฅผ _app.js์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ œ๋ชฉ๊ณผ ํŒŒ๋น„์ฝ˜์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. _app.js์—์„œ Head๋ฅผ ์ œ๊ฑฐํ•ด๋„์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. _app ๋ฐ _document์—์„œ ํ—ค๋“œ๋ฅผ ์ œ๊ฑฐํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ _document์˜ Head๋ฅผ ๋‹ค์‹œ ๋จธ๋ฆฌ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  _app์— Head๋ฅผ๋‘๊ณ  ์ œ๋ชฉ๊ณผ favicon์„ ์„ค์ •ํ–ˆ๋Š”๋ฐ ์ด์ œ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ ๋“  ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•˜๋ฉด ์—ฌ๊ธฐ์—์„œ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ •๋ณด๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ 2 : ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜์ง€๋งŒ ๋ฐœ์ƒ ๋นˆ๋„๋Š” ์ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ js๋ฅผ๋กœ๋“œํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒ˜์Œ์œผ๋กœ ํŽ˜์ด์ง€ "x"๋ฅผ๋กœ๋“œํ•˜๋ฉด

๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์ง€๊ธˆ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด CSS ๋กœ๋”ฉ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ตฌ์„ฑ์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@ jon64digital ์ €๋Š” # 5994์—์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๊ธ€์„ ์ผ์Šต๋‹ˆ๋‹ค. ํ๊ธฐ ์‹œ๊ฐ„ ์ œํ•œ์„

@timneutkens ์ €๋Š” 8.1.1-canary.24 ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฒ„๊ทธ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒ๊ฐ?

ํŽธ์ง‘ : ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„ ๋‚ด์‹ญ์‹œ์˜ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์š” ... :
index.tsx ๋ฐ index.less ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด netxt.config.js ํŒŒ์ผ์—์„œ cssModules๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค (withLess ์‚ฌ์šฉ). /subpage ๋กœ๋“œํ•˜๊ณ  / (๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํƒ€์ผ ๊ฐ€์ ธ ์˜ค๊ธฐ : import css from './index.less'; )๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋งํฌ๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋™์ ์œผ๋กœ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค ( http://localhost:3000/_next/static/development/pages/index.js ) ๊ทธ๋Ÿฌ๋‚˜ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค URL์€ ์ „ํ˜€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉˆ์ถ˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ... ์ ์€ ํŒŒ์ผ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์™€ํŠธ๋Š”?

Edit2 : https://github.com/zeit/next-plugins/issues/282 ๋กœ ์‹คํ–‰์ค‘์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ 8.1.0 ์—์„œ๋„ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์žฌํ˜„ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹๊ฒƒ์ž…๋‹ˆ๋‹ค

๋‚˜์—๊ฒŒ๋„ / about ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋งค๋ฒˆ 404๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค! ๋ผ์šฐํŒ…์˜ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!? : /

package.json ์ข…์†์„ฑ :

"dependencies": { "cross-env": "^5.2.0", "express": "^4.17.0", "next": "^8.1.0", "react": "^16.8.6", "react-dom": "^16.8.6" }

@jsbimra ํ•ญ์ƒ ์ „์ฒด ๋ณต์ œ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. "๋‚˜์—๊ฒŒ ์ผ์–ด๋‚œ ์ผ"์„ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@jsbimra _ ํ•ญ์ƒ _ ์ „์ฒด ๋ณต์ œ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. "๋‚˜์—๊ฒŒ ์ผ์–ด๋‚œ ์ผ"์„ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š”, ๊ทธ๊ฒƒ์€ @timneutkens ๊ท€์ฐฎ๊ฒŒํ•ด์„œ ๋ฏธ์•ˆ next.js์˜ ํŽ˜์ด์ง€ ํด๋” ์•„๋ž˜ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ์—†๋Š” ๋‹จ๊ณ„๋กœ ๊ด€๋ จ์ด ๋ฐœ๊ฒฌ

์ด๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ”„๋กœ๋•์…˜์—์„œ๋„ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ๊ฐœ๋ฐœ์ž์—์„œ๋Š” ๋‚˜์—๊ฒŒ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 2018 ๋…„๊ณผ 2019 ๋…„ 5 ์›” 22 ์ผ์˜ ๋ฒ„๊ทธ๋Š” ์—ฌ์ „ํžˆ์ด ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋‹ค์ง€ ์—ผ๋ คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ •๋ง ํฐ ๋ฌธ์ œ ...

2018 ๋…„๊ณผ 2019 ๋…„ 5 ์›” 22 ์ผ์˜ ๋ฒ„๊ทธ ์—ฌ์ „ํžˆ์ด ๋ฒ„๊ทธ๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@malimccalla ๊ฐ€ ์ œ๊ณต ํ•œ ๋ณต์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํ”„๋กœ๋•์…˜์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‚˜๋Š” ๊ทธ๋‹ค์ง€ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์˜๊ฒฌ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „์— ์—ฌ๋Ÿฌ ๋ฒˆ ๋งํ–ˆ๋“ฏ์ด :

ํ•ญ์ƒ ์ „์ฒด ์žฌ์ƒ์‚ฐ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. "๋‚˜์—๊ฒŒ ์ผ์–ด๋‚œ ์ผ"์„ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „ (8.1.0)๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „ (8.1.0)๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด์ œ ๋˜‘๊ฐ™์€ ๋ฉ”์‹œ์ง€๋กœ 3 ๋ฒˆ ์ •๋„ ๋‹ต์žฅ์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค .

์ด ์˜๊ฒฌ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „์— ์—ฌ๋Ÿฌ ๋ฒˆ ๋งํ–ˆ๋“ฏ์ด :

ํ•ญ์ƒ ์ „์ฒด ์žฌ์ƒ์‚ฐ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. "๋‚˜์—๊ฒŒ ์ผ์–ด๋‚œ ์ผ"์„ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

~ / index.tsx ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ๋กœ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋งˆ์นจ๋‚ด ์›์ธ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค!

react-activity ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋™์‹œ์— CSS๋ฅผ ๊ฐ€์ ธ์™€์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณณ์—์„œ ๊ฐ™์€ CSS๋ฅผ ๋‘ ๋ฒˆ ์ฝ์œผ๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
_app.tsx ์„ ์ฝ์€ ๊ฒฐ๊ณผ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@timneutkens ์ข‹์•„์š”, ๋ฌผ๋ก  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ์ƒํ™ฉ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ์•„์ง ๋นŒ๋“œ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿค”

๋‚˜๋Š” ์ง€๊ธˆ ๋˜‘๊ฐ™์€ ๋ฉ”์‹œ์ง€๋กœ 4 ๋ฒˆ ์ •๋„ ๋‹ต์žฅ์„ํ–ˆ๋‹ค. ๋ณต์ œ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค .

์ด ์˜๊ฒฌ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „์— ์—ฌ๋Ÿฌ ๋ฒˆ ๋งํ–ˆ๋“ฏ์ด :

ํ•ญ์ƒ ์ „์ฒด ์žฌ์ƒ์‚ฐ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. "๋‚˜์—๊ฒŒ ์ผ์–ด๋‚œ ์ผ"์„ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€๋Š” ์ฃผ๋ฌธํ˜•์œผ๋กœ ์ž‘์„ฑ๋˜๋ฉฐ์ด ์‹œ์Šคํ…œ์€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์— webpack์ด ํŒŒ์ผ์„ ์™„์„ฑ ๋œ ๊ฒƒ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š๋„๋กํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์žฌ์ƒ์‚ฐ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์•ž์„œ ์–ธ๊ธ‰ ํ•œ ํŠน์ • ๋ฌธ์ œ๋Š” ์ด๋ฏธ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ ์‹œ๊ฐ„ ์ œํ•œ์„ ๋Š˜๋ ค๋„ ๋ฐœ์ƒํ•œ ํŠน์ • ๋ฌธ์ œ์— ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ๊ณ„์† ๋ณต์ œ๋ฅผ ์š”์ฒญํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๊ณ  ๊ทธ๊ฒƒ์— ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๊ฒŒ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์–ด์ œ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํŠน์ • ์‚ฌํ•ญ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค๋Š˜ ๋‚˜์ค‘์— ์ ์ฐจ์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ๋ถ„ํ•ดํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ์ง€์ ์„ ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์•ˆ์ •์ ์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์€ ์ œ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์ •ํ™•ํžˆ ์ฐพ์•„ ๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜์œ ์†Œ์‹์€ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ์ œ๊ฐ€์ด ์Šค๋ ˆ๋“œ์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด๋ณด๊ณ  ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฌธ์ œ๊ฐ€ CSS ๋ฐ ์ฒ˜๋ฆฌ ์ œํ•œ๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ๊ณ  ํ•ด๊ฒฐ ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค๋ฉด ๋ญ”๊ฐ€ ์ž˜๋ชปํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ ๋„ฃ์€ ๊ณณ์ธ๊ฐ€์š”?

module.exports = withCSS({ onDemandEntries: { maxInactiveAge: 1000 * 60 * 60 } })

๋ณต์ œ : https://github.com/dydokamil/next-js-router-bug

๋ฟก ๋นต๋€จ
์•Œ๋ ค์ง„ ๋ฒ„๊ทธ : https://github.com/zeit/next-plugins/issues/282
๋นˆ CSS ํŒŒ์ผ์„ ๊ฐ€์ ธ ์™€์„œ "ํ•ด๊ฒฐ"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐœ๋ฐœ, ํ”„๋กœ๋•์…˜ ๋ฐ ์ •์  ๋‚ด๋ณด๋‚ด๊ธฐ ๋ชจ๋“œ์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ onDemandEntries ๋˜๋Š” ๋นˆ CSS ํŒŒ์ผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋‚ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€์˜ ๋ณธ๋ฌธ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ import 'highlight.js/styles/color-brewer.css'; ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” <Link> ์ธ์Šคํ„ด์Šค๋Š”๋กœ๋“œ์— ์‹คํŒจํ•˜์ง€๋งŒ http://localhost:3000/_next/static/development/pages/post.js ๋Š” <Link> ํด๋ฆญ์‹œ ํŽ˜์ด์ง€์— ๊ณ„์† ๋“œ๋กญ๋ฉ๋‹ˆ๋‹ค. css ๊ฐ€์ ธ ์˜ค๊ธฐ, <Link> s to blog posts work perf. ์ฃผ์„์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  <Link> ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„๋กœ๋“œํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง์ ‘ ์น˜๋Š” ๊ฒƒ์€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ๋ฒ„๊ทธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—๋งŒ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…. ์ด๋Š” ๋ฒ„์ „ 6์—์„œ ๋ฒ„์ „ 8๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” @zeit/next-css ํ–ˆ์ง€๋งŒ @zeit/next-sass ์—์„œ ์Šค์™€ํ•‘ํ•˜๊ณ  .scss ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ ํ›„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ๋ณต์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ styled-components drop @zeit/next-css ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์„๋กœ๋“œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. https://www.npmjs.com/package/@zeit/next -css ๋ฐ https://www.npmjs.com/package/@zeit/next -sass๋ฅผ ๊ฒ€ํ†  ํ•œ ํ›„ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์˜ˆ์ œ๊ฐ€ ๊นจ์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿค”

https://github.com/zeit/next-plugins/issues/282์— ๋ณต์ œ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์„ค๋ช…ํ•˜๋Š” ๋‚ด์šฉ์ด ๊ทธ ๋ฌธ์ œ์™€ ๋˜‘๊ฐ™์ด ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐœ๋ฐœ, ํ”„๋กœ๋•์…˜ ๋ฐ ์ •์  ๋‚ด๋ณด๋‚ด๊ธฐ ๋ชจ๋“œ์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ onDemandEntries ๋˜๋Š” ๋นˆ CSS ํŒŒ์ผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋‚ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€์˜ ๋ณธ๋ฌธ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ import 'highlight.js/styles/color-brewer.css'; ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” <Link> ์ธ์Šคํ„ด์Šค๋Š”๋กœ๋“œ์— ์‹คํŒจํ•˜์ง€๋งŒ http://localhost:3000/_next/static/development/pages/post.js ๋Š” <Link> ํด๋ฆญ์‹œ ํŽ˜์ด์ง€์— ๊ณ„์† ๋“œ๋กญ๋ฉ๋‹ˆ๋‹ค. css ๊ฐ€์ ธ ์˜ค๊ธฐ, <Link> s to blog posts work perf. ์ฃผ์„์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  <Link> ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„๋กœ๋“œํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ˆ„๋ฅด๋Š” ๊ฒƒ์€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฒ„๊ทธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…๊ณผ ๋งŒ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ„์ „ 6์—์„œ ๋ฒ„์ „ 8๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” @zeit/next-css ํ–ˆ์ง€๋งŒ @zeit/next-sass ์—์„œ ์Šค์™€ํ•‘ํ•˜๊ณ  .scss ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ ํ›„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ๋ณต์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ styled-components drop @zeit/next-css ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์„๋กœ๋“œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. https://www.npmjs.com/package/@zeit/next -css ๋ฐ https://www.npmjs.com/package/@zeit/next -sass๋ฅผ ๊ฒ€ํ†  ํ•œ ํ›„ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์˜ˆ์ œ๊ฐ€ ๊นจ์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๐Ÿค”

next / css ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ ํ•œ ํ›„์ด ๋ฌธ์ œ๊ฐ€ ๋‚˜์—๊ฒŒ๋„ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ค‘์—๋„ ๋™์ผํ•œ ์ผ์ด ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ (ํ”„๋กœ๋•์…˜์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ ํ•จ) ๋ฌธ์ œ๋Š” sass ํŒŒ์ผ์„ ๊ฐ€์ ธ ์˜ค๋Š” ํŽ˜์ด์ง€์— ๋งํฌ (๋˜๋Š” ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ ํฌํ•จ) ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

๋‚ด next.config.js ํŒŒ์ผ :

const withSass = require('@zeit/next-sass');

const withBundleAnalyzer = require('@next/bundle-analyzer')({
  enabled: process.env.ANALYZE === 'true',
});

require('dotenv').config();

module.exports = withBundleAnalyzer(
  withSass({
    distDir: '../dist',
    env: {...},
  }),
);

๋”ฐ๋ผ์„œ ์‹ฌ์ธต ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

// MIGRATE: PriceDetail to styled components
import './PriceDetail.scss';

๊ฐ€์ ธ ์˜ค๊ธฐ์— ๋Œ“๊ธ€์„ ๋‹ฌ๋ฉด ๋งํฌ๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ withSass ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ๋™์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ƒ์‚ฐ์—์„œ๋„. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ ๋งํฌ๊ฐ€ ๋•Œ๋•Œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ 9.4์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์–ด์ œ ํ”„๋กœ์ ํŠธ์— CodeMirror ์ถ”๊ฐ€
import "codemirror/lib/codemirror.css"

๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ ๊ทธ ๋์— router.replace("/") ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” pages / page2.js์™€ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ์•„๋ฌด ์ž‘์—…๋„ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋””๋ฒ„๊ฑฐ์—์„œ router.replace("/") ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด catch ๋˜๋Š” finally ๋ธ”๋ก์„ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ์ ์ค‘ํ•˜์ง€ ์•Š๋Š” ์•ฝ์†์ด ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€์žˆ๋Š” ๊ฒƒ์€ ๋‚ด next.config.js์— next-css๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.์ด ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๊ณ  ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ํ•ซ ํ”ฝ์Šค๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‚˜์š”? =)

์•„ํ•˜, ๊ทธ๊ฒŒ ์ €๋ฅผ ์œ„ํ•ด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค-๋ถ„๋ช…ํžˆ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์‰˜ _app.js ํŒŒ์ผ๋กœ ์˜ฎ๊ฒจ์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

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