πΌοΈ React UI
μ΄ ν¨ν€μ§λ NPM κ³΅κ° λ°°ν¬λ₯Ό μν μ€μ μ΄ 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
μμ μ μλ κ²½λ‘ λ³μΉμ μ¬μ©νμ¬ μ½λ κ°λ μ±μ λμ λλ€.