Razzle: ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— razzle์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2018๋…„ 05์›” 24์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jaredpalmer/razzle

๋ถ€์ ์ ˆํ•œ ์งˆ๋ฌธ์ด์—ˆ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค
๋‚ด ํ”„๋กœ์ ํŠธ๋Š” CRA์—์„œ ๋งŒ๋“ค๊ณ  Express.js๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์‹œ์ž‘ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฌธ์„œ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด razzle ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?
ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—๋งŒ ์ ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์•ฑ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๊ฐ™์€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์ถคํ˜• React ์•ฑ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. razzle์„ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋‚˜๋Š” ์ง€๊ธˆ ์ด ์ผ์„ ๊ฒช๊ณ  ์žˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ CRA ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

/projects/my-cra-app
์œ„์˜ ์•„๋ž˜์—๋Š” src , node_modules ๋ฐ CRA๊ฐ€ ๋งŒ๋“  ๋ชจ๋“  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— razzle์„ ํ˜ผํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. (์ฒ˜์Œ์—๋Š” razzle์ด CRA๋ฅผ ๋Œ€์ฒดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ์‹ค์ œ๋กœ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์—์„œ Client-render(ํฌํŠธ 3001) ๋ฐ Server-render(ํฌํŠธ 3000)๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์ด์ „์— ์—ฌ๊ธฐ์— ์งˆ๋ฌธ์„ ์˜ฌ๋ ธ์ง€๋งŒ ์‘๋‹ต์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค).
๋˜ํ•œ webpack4์™€ ํ•จ๊ป˜ razzle ์ตœ์‹ (์•ŒํŒŒ)์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ CRA๋Š” ์—ฌ์ „ํžˆ webpack(3)์ด์ง€๋งŒ webpack 4์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ดˆ๊ธฐ ์ปค๋ฐ‹์ด ์ด์ œ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค...

๊ทธ๋ž˜์„œ ์ง€๊ธˆ ๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

/projects/my-app/app.src
node_modules๋ฅผ ํฌํ•จํ•˜๋Š” /projects/my-app/app-cra(cra ์ƒ์„ฑ App.js App.css๋ฅผ ํฌํ•จํ•˜๋Š” ./src/ ํฌํ•จ)
node_modules๋ฅผ ํฌํ•จํ•˜๋Š” /projects/my-app/app-ssr(razzle ์ƒ์„ฑ ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜๋Š” ./src/ ํฌํ•จ)

๊ทธ๋Ÿฌ๋ฉด app-cra/src์—๋Š” ../../app.src์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
app-ssr/src์—๋Š” ../../app.src์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ์†Œ์Šค๋Š” ๊ฐ™์ง€๋งŒ ์ง„์ž…์  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค๋ฅด๊ณ  razzle๊ณผ cra ๊ฐ„์— ๋‹ค๋ฅธ node_modules๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ razzle์€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ฐ”๋กœ JS๋ฅผ ๋ณ€ํ™˜/์ปดํŒŒ์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” cRA๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž„).

๊ทธ๋ž˜์„œ ์ €๋Š” CRA์— ๋Œ€ํ•ด rewire๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  razle-config.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‚ด JS ํŒŒ์ผ์„ ๋ณด๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” razle-config.js์—์„œ ์„ ํƒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ stack-overflow์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(SSR์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— .. . ๊ทธ๋ž˜์„œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋Œ€ํ•œ ๋„์›€๋ง์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค).

๋‚˜๋Š” ๊ธฐ๋ณธ razzle(react-native-web, react-vector-icons, sass, symlinked ๋””๋ ‰ํ† ๋ฆฌ..., ์„ ํƒํ•œ node_modules ๋ชจ๋“ˆ์„ ์ „์†กํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ผ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ๋“ฑ)

https://stackoverflow.com/questions/50514135/error-in-react-native-vector-icons-when-using-for-web-server-side-rendering

ํ , ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•„์ง๋„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์š”.

@ifndefdeadmau5 CRA ์•ฑ์„ ์œ ์ง€ํ•˜์„ธ์š”.

a) CRA ์•ฑ์˜ ๋™์ผํ•œ ํด๋” ์ˆ˜์ค€์—์„œ create-razzle-app์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ƒˆ ์•ฑ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

b) ๋‘ ์•ฑ ๊ฐ„์— ๊ณต์œ ํ•˜๋ ค๋Š” ํŒŒ์ผ์„ ๊ณตํ†ต ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

c) b)์—์„œ ์ƒ์„ฑํ•œ ํด๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ์•ฑ์˜ src ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

d) razzle-config.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  (CRA ์•ฑ์˜ ๊ฒฝ์šฐ) ๋‹ค์‹œ ๋ฐฐ์„ ํ•˜์—ฌ ์›นํŒฉ์ด c) ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์˜ JS ํŒŒ์ผ์„ ์ „์†กํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ˆ๋ฅผํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์—ˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋” ๋‚˜์€ ๋Œ€๋‹ต์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

@jaredpalmer ์•ˆ๋…•ํ•˜์„ธ์š”, CRA์—์„œ razzle ์„œ๋ฒ„ ๋ Œ๋”๋ง ์•ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  readme์—์„œ ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ—! ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ ์˜คํ”ˆ ์†Œ์Šค์™€ ์ผ์ƒ ์—…๋ฌด ๋ฐ ์ƒํ™œ ์‚ฌ์ด์˜ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— GitHub ๋ด‡์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠน์ • GitHub ๋ด‡์€ ์ตœ๊ทผ ํ™œ๋™์ด ํ•œ๋™์•ˆ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ถ€์‹คํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉฐ์น  ๋™์•ˆ ๋” ์ด์ƒ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ๊ฐœ์ธ์ ์œผ๋กœ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์™„์ „ํžˆ ์ž๋™ํ™”๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‹ค์ˆ˜๋ผ๋ฉด ๋Œ“๊ธ€, DM, ์บ๋ฆฌ์–ด ๋น„๋‘˜๊ธฐ ๋˜๋Š” ์—ฐ๊ธฐ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์‹ญ์‹œ์˜ค.

๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ์ธํ•ด ProBot์ด ์ด๋ฅผ ์ž๋™์œผ๋กœ ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‹ค์ˆ˜๋ผ๋ฉด Holler, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ์—ด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์ถคํ˜• React ์•ฑ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. razzle์„ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ž์Šต์„œ๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๋™์ผํ•œ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋„ ์ด๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” CRA ์•ฑ์ด ์žˆ์—ˆ๊ณ  index.tsx ์˜ ์ด๋ฆ„์„ client.tsx ๋กœ ๋ฐ”๊พธ๊ณ  ์„œ๋ฒ„๋ฅผ index.ts ์— ์ถ”๊ฐ€ํ•˜์—ฌ Razzle๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ razzle start ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ทธ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ๋ฌถ์œผ๋ ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค.

These dependencies were not found:

* fs in ../.yarn/$$virtual/babel-plugin-styled-components-virtual-cfb9253662/0/cache/babel-plugin-styled-components-npm-1.11.1-9e78975a1c-4b545bed54.zip/node_modules/babel-plugin-styled-components/lib/visitors/displayNameAndId.js, ../.yarn/cache/cosmiconfig-npm-6.0.0-cb7d64a2b9-bbd6bbaefe.zip/node_modules/cosmiconfig/dist/readFile.js and 4 others
* module in ../.yarn/cache/resolve-patch-af4189aea7-9e62d2803a.zip/node_modules/resolve/lib/normalize-options.js, ../.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-87a4357c0c.zip/node_modules/resolve-from/index.js

๋ˆ„๊ตฌ๋“ ์ง€ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

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