Skip to Content
Nextra 4.0 is released πŸŽ‰

πŸ–ΌοΈ React UI

이 νŒ¨ν‚€μ§€λŠ” NPM 곡개 배포λ₯Ό μœ„ν•œ 섀정이 package.json에 ν¬ν•¨λ˜μ–΄ μžˆμ–΄μš”. 배포λ₯Ό μ›ν•˜μ§€ μ•Šμ„ 경우, package.jsonμ—μ„œ μ•„λž˜μ˜ 섀정듀을 μ œκ±°ν•΄μ£Όμ„Έμš”:

package.json
{ "private": false, "publishConfig": { "access": "public" }, }

πŸ“– κ°œμš”

react-ui νŒ¨ν‚€μ§€λŠ” React μ»΄ν¬λ„ŒνŠΈ 라이브러리둜, UI κ°œλ°œμ„ λ‹¨μˆœν™”ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ œκ³΅ν•΄μš”.

🎯 μ£Όμš” λͺ©ν‘œ

React μ»΄ν¬λ„ŒνŠΈ ν˜•νƒœλ‘œ μ‚¬μš© κ°€λŠ₯ν•œ UI νŒ¨ν‚€μ§€λ₯Ό μƒˆλ‘œ μΆ”κ°€ν•˜κ³  싢을 λ•Œ 이 νŒ¨ν‚€μ§€λ₯Ό λ³΅μ‚¬ν•˜μ—¬ 개발의 μ‹œμž‘μ μœΌλ‘œ 삼을 수 μžˆλ„λ‘, μ•„λž˜μ™€ 같은 λͺ©μ λ“€μ„ κ°€μ§€κ³  μž‘μ„±λ˜μ—ˆμ–΄μš”:

  • Tailwind CSS 기반의 μŠ€νƒ€μΌλ§μ„ μ§€μ›ν•˜λ„λ‘ μ„€μ •
  • ShadCN UI μ»΄ν¬λ„ŒνŠΈλ“€μ„ 베이슀 μ»΄ν¬λ„ŒνŠΈλ‘œ ν™œμš©ν•  수 μžˆλ„λ‘ μ„€μ •
  • Hooks, Context API, μœ ν‹Έλ¦¬ν‹° νƒ€μž… λ“± React μ—μ„œ μ œκ³΅λ˜λŠ” API 듀을 ν™œμš©ν•  수 μžˆλ„λ‘ React, ReactDOM 을 μ™ΈλΆ€ μ˜μ‘΄μ„±μœΌλ‘œ μ„€μ •
  • JSX λ³€ν™˜μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ TypeScript μ„€μ •
  • μ½”λ“œ μŠ€ν”Œλ¦¬νŒ… 및 트리 쉐이킹을 μ§€μ›ν•˜κΈ° μœ„ν•œ Vite 기반 λΉŒλ“œ μ„€μ •
  • TypeScript μ„ μ–Έ 파일 μ œκ³΅μ„ μœ„ν•œ μ„€μ •
  • npm 곡개 배포 μ‹œ ν•„μš”ν•œ 각쒅 package.json κ΄€λ ¨ μ„€μ •

πŸ“¦ 제곡 κΈ°λŠ₯

  • ShadCN UI: ShadCN UI κ΄€λ ¨ λͺ¨λ“ˆμ„ μ œκ³΅ν•΄μš”.
  • Utils: React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” UI κ΄€λ ¨ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ λͺ¨μŒμ„ μ œκ³΅ν•΄μš”.
  • Components: λ‹€μ–‘ν•œ React UI μ»΄ν¬λ„ŒνŠΈλ₯Ό μ œκ³΅ν•΄μš”.
  • Constants: λ°˜μ‘ν˜• λ””μžμΈμ„ μœ„ν•œ Breakpoints λ“±κ³Ό 같은 μŠ€νƒ€μΌ κ΄€λ ¨ μƒμˆ˜λ“€μ„ μ œκ³΅ν•΄μš”.
  • Base CSS: κΈ°λ³Έ μŠ€νƒ€μΌ νŒŒμΌμ„ μ œκ³΅ν•΄μš”.

πŸ› οΈ λΉŒλ“œ 방식 및 μ£Όμš” μ„€μ •

이 νŒ¨ν‚€μ§€λŠ” Vite와 TypeScriptλ₯Ό 기반으둜 λ©€ν‹° μ—”νŠΈλ¦¬ 라이브러리 ν˜•νƒœλ‘œ λΉŒλ“œλ©λ‹ˆλ‹€.
각 κΈ°λŠ₯λ³„λ‘œ λ³„λ„μ˜ μ—”νŠΈλ¦¬(shadcn-ui, utils, components, constants, base.css)λ₯Ό μ œκ³΅ν•˜λ©°, λΉŒλ“œ μ‚°μΆœλ¬Όμ€ dist 폴더에 ES λͺ¨λ“ˆ(.es.js)κ³Ό CommonJS(.cjs.js) ν˜•μ‹μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€.

package.json

  • exports: 각 κΈ°λŠ₯별 μ—”νŠΈλ¦¬(shadcn-ui, utils, components, constants, base.css)λ₯Ό 뢄리해 νƒ€μž… μ„ μ–Έ(.d.ts), ES λͺ¨λ“ˆ, CJS λͺ¨λ“ˆμ„ λͺ¨λ‘ μ œκ³΅ν•©λ‹ˆλ‹€.
  • publishConfig: "access": "public"으둜 npm 곡개 배포가 κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • files: λΉŒλ“œ μ‚°μΆœλ¬Ό(dist)만 νŒ¨ν‚€μ§€μ— ν¬ν•¨λ˜λ„λ‘ μ§€μ •ν•©λ‹ˆλ‹€.
  • peerDependencies: react, react-dom을 μ™ΈλΆ€ μ˜μ‘΄μ„±μœΌλ‘œ λͺ…μ‹œν•˜μ—¬, ν”„λ‘œμ νŠΈμ—μ„œ 직접 μ„€μΉ˜ν•˜λ„λ‘ μš”κ΅¬ν•©λ‹ˆλ‹€.
  • scripts: Vite와 TypeScriptλ₯Ό ν™œμš©ν•œ λΉŒλ“œ, νƒ€μž… 체크, ν…ŒμŠ€νŠΈ λ“± λ‹€μ–‘ν•œ 개발 μŠ€ν¬λ¦½νŠΈκ°€ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

vite.config.ts

  • λ©€ν‹° μ—”νŠΈλ¦¬ λΉŒλ“œ: runWithGlob μœ ν‹Έμ„ ν™œμš©ν•΄ src 폴더 λ‚΄μ˜ 각 μ—”νŠΈλ¦¬ νŒŒμΌμ„ μžλ™μœΌλ‘œ κ°μ§€ν•˜μ—¬ λΉŒλ“œ μ—”νŠΈλ¦¬λ‘œ λ“±λ‘ν•©λ‹ˆλ‹€.
  • 라이브러리 λͺ¨λ“œ: Vite의 라이브러리 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•΄ ES/CJS 포맷으둜 각각 λΉŒλ“œν•©λ‹ˆλ‹€.
  • νƒ€μž… μ„ μ–Έ: vite-plugin-dts둜 각 μ—”νŠΈλ¦¬λ³„ νƒ€μž… μ„ μ–Έ νŒŒμΌμ„ μžλ™ μƒμ„±ν•©λ‹ˆλ‹€.
  • 경둜 별칭: vite-tsconfig-paths둜 TypeScript 경둜 별칭을 μ§€μ›ν•©λ‹ˆλ‹€.
  • μ™ΈλΆ€ μ˜μ‘΄μ„±: react, react-dom, react/jsx-runtime은 λ²ˆλ“€μ— ν¬ν•¨ν•˜μ§€ μ•Šκ³  μ™ΈλΆ€ μ˜μ‘΄μ„±μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

tsconfig.json

  • λͺ¨λ“ˆ 해석: "moduleResolution": "bundler"둜 λ²ˆλ“€λŸ¬ μΉœν™”μ μΈ λͺ¨λ“ˆ 해석을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • νƒ€μž… 지원: μ΅œμ‹  ECMAScript, DOM, React κ΄€λ ¨ νƒ€μž…μ„ μ§€μ›ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • JSX: "jsx": "react-jsx"둜 React 17+ JSX λ³€ν™˜μ„ μ§€μ›ν•©λ‹ˆλ‹€.
  • 엄격 λͺ¨λ“œ: νƒ€μž… 검사 및 린트 κ΄€λ ¨ μ˜΅μ…˜μ΄ μ—„κ²©ν•˜κ²Œ μ μš©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • 경둜 별칭: tsconfig.jsonμ—μ„œ μ •μ˜λœ 경둜 별칭을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œ 가독성을 λ†’μž…λ‹ˆλ‹€.

Last updated on