π λ°λͺ¨ β
ν΄λ¦ λͺ λ²μΌλ‘ μ΄ ν νλ¦Ώμ 볡μ¬λ³Έμ λ°°ν¬νμΈμ!
μ΄ ν νλ¦Ώμ λΉμ μ λ€μ React νλ‘μ νΈμ νμν λͺ¨λ κ²κ³Ό JAMStack μ λͺ¨λ λͺ¨λ² μμ λ₯Ό λ΄κ³ μμ΅λλ€.
μ΄ ν νλ¦Ώμλ μ¬λ¬ ν΄λ, μ½λ μμ λ° κ΅¬μ±μ΄ ν¬ν¨λμ΄ μμ΅λλ€. μ΄ README νμΌμ ν¬ν¨ν΄ μμ λ‘κ² νΈμ§νκ±°λ μμ νμΈμ!
μνλλλ‘ μμ νκ³ μ¦κΈ°μΈμ!
π μ€λͺ μ β
μ΄ νλ‘μ νΈμλ μ΅μ μΉ κ°λ° ν΄λ€κ³Ό μμλ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€!
- βοΈ Next.js β νμ΄λΈλ¦¬λ λ° μλ² λ λλ§μ μν μλ²½ν React νλ μμν¬
- β³οΈ React Query β Reactμμ λΉλκΈ° λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ μΊμ±νκ³ μ λ°μ΄νΈνκΈ° μν Hooks
- βοΈ SWR (React Queryμ λμ) β λ°μ΄ν°λ₯Ό κ°μ Έμ€κΈ°λ₯Ό μν React Hooks λΌμ΄λΈλ¬λ¦¬
- π Axios β λΈλΌμ°μ λ° Node.jsμ λν Promise κΈ°λ° HTTP ν΄λΌμ΄μΈνΈ
- π» Zustand β λ¨μνλ νλμ€(μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μν μ ν리μΌμ΄μ μν€ν μ²) μμΉμ μ¬μ©ν μκ³ , λΉ λ₯΄κ³ , νμ₯ κ°λ₯ν μν κ΄λ¦¬ μ루μ
- π react-use β νμ React Hook 컬λ μ
- π¨ Chakra-UI β React μ±μ λΉλνκΈ° μν λΉλ© λΈλ‘μ μ 곡νλ κ°λ¨ν λͺ¨λμ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬
- ποΈ Framer Motion β Reactμ© νλ‘λμ μ€λΉ λͺ¨μ λΌμ΄λΈλ¬λ¦¬
- β¨ React Icons β React νλ‘μ νΈμ μμ£Ό μ¬μ©λλ μμ΄μ½ λͺ¨μ
- π React Hook Form β μ¬μ©νκΈ° μ¬μ΄ κ²μ¦μ ν΅ν΄ μ±λ₯, μ μ°μ± λ° νμ₯μ±μ΄ λ°μ΄λ νΌ
- π¨ Yup β νΌ μ ν¨μ± κ²μ¬ λ°νμ κ° κ΅¬λ¬Έ λΆμ λ° μ ν¨μ± κ²μ¬λ₯Ό μν μ€ν€λ§ λΉλ
- π Jest β λ¨μμ±μ μ΄μ μ λ§μΆ μ¦κ±°μ΄ JavaScript ν μ€νΈ νλ μμν¬
- π Testing Library β μ°μν ν μ€νΈλ₯Ό μ μνλ κ°λ¨νκ³ μλ²½ν ν μ€νΈ μ νΈλ¦¬ν°
- β ESLint β JavaScript μ½λ λ΄ λ¬Έμ μ°ΎκΈ° λ° ν΄κ²°
- π Prettier β λ€μν μΈμ΄ λ° μ½λ νΈμ§κΈ°λ₯Ό μ§μνλ μ½λ ν¬λ§·ν°
- πΊ Husky β κ°νΈν λͺ¨λ λ€μ΄ν°λΈ Git Hooks
- π© lint-staged β μ€λΉλ git νμΌμ λν΄ λ¦°ν°λ₯Ό μ€ννκ³ π©μ΄ μ½λ λ² μ΄μ€μ λ€μ΄κ°μ§ μλλ‘ μ§μ
- π commitlint β νμ΄ μ»€λ° κ·μΉμ μ€μνλλ‘ μ§μ
- π·οΈ Standard Version β κΈ°μ‘΄ 컀λ°μΌλ‘ ꡬλλλ sember λ° CHANGELOG μμ±μ μ΄μ©ν λ²μ κ΄λ¦¬ μ νΈλ¦¬ν°
- π΅π»ββοΈ why-did-you-render (μ ν μ¬ν) β μ μ¬μ μΌλ‘ νΌν μ μλ μ¬λ λμ λν΄ μλ¦Ό
- ποΈ next-compose-plugins β Next.jsμ νλ¬κ·ΈμΈκ³Ό λ κΉ¨λν APIλ₯Ό μ 곡
- π± next-pwa β Next.js μ μ© PWA νλ¬κ·ΈμΈ
- π next-seo β Next.js νλ‘μ νΈμμ SEOλ₯Ό λ μ½κ² κ΄λ¦¬ν μ μλ νλ¬κ·ΈμΈ
- π€ next-sitemap β Next.js μ μ© μ¬μ΄νΈ 맡 μμ±κΈ°
- π Partytown β 리μμ€ μ§μ½μ μΈ νμ¬ μ€ν¬λ¦½νΈλ₯Ό λ©μΈ μ€λ λμμ μΉ μμ μλ‘ μ¬λ°°μΉ
- "Use this template" λ²νΌμ ν΄λ¦ν©λλ€.
- μ λ ν¬μ§ν 리λ₯Ό ꡬμ±νκ³ "Create repository from template" λ²νΌμ ν΄λ¦ν©λλ€.
- μ΄μ μμ±λ λ ν¬μ§ν 리λ₯Ό λ‘컬μ 볡μ ν μ μμ΅λλ€. :
$ git clone https://github.com/<YOUR-GITHUB-LOGIN>/<NAME-OF-YOUR-GENERATED-REPOSITORY>.git
μνΌ μ± κ°λ°μ μμνκΈ° μ μ νλ‘μ νΈμ μ’ μμ±μ μ€μΉν΄μΌ ν©λλ€.
νλ‘μ νΈμ 루νΈλ‘ μ΄λν©λλ€. :
$ cd <NAME-OF-YOUR-GENERATED-REPOSITORY>
λ€μ λ¨κ³μμλ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό μ ννκ³
package.json
μ€ν¬λ¦½νΈμ ν¬ν¨λ λͺ λ Ήμ΄λ₯Ό μ ννκ³ λ³κ²½ν©λλ€. μμΈν λ΄μ©μ μλ μ€λͺ μλ₯Ό μ°Έμ‘°νμΈμ.
νλ‘μ νΈμ λͺ¨λ μ’ μμ±μ μ€μΉν©λλ€. :
# PNPM
$ pnpm install
# NPM
$ npm install
# Yarn
$ yarn install
λͺ¨λ μ’ μμ±μ΄ μ€μΉλλ©΄ λ‘컬 κ°λ° μλ²λ₯Ό μ€νν μ μμ΅λλ€. :
# PNPM
$ pnpm run dev
# NPM
$ npm run dev
# Yarn
$ yarn dev
μ΄μ μ½λ©νλ©΄ λ©λλ€!
λ³κ²½ λ΄μ©μ μ μ©ν ν νλ‘λμ νκ²½μ ν μ€νΈ λ°/λλ λ°°ν¬ν λΉλλ₯Ό μμ±ν μ μμ΅λλ€.
νλ‘λμ λΉλ λ§λ€κΈ° :
# PNPM
$ pnpm run build
# NPM
$ npm run build
# Yarn
$ yarn build
κ·Έλ° λ€μ λΉλλ₯Ό μ€νν©λλ€. :
# PNPM
$ pnpm start
# NPM
$ npm start
# Yarn
$ yarn start
μ¬μ©ν μ μλ μΆκ° λͺ λ Ή 보기
# PNPM
$ pnpm run lint
# NPM
$ npm run lint
# Yarn
$ yarn lint
# PNPM
$ pnpm run lint:fix
# NPM
$ npm run lint:fix
# Yarn
$ yarn lint:fix
$ pnpm run test # or pnpm run test:watch
# NPM
$ npm run test # or npm run test:watch
# Yarn
$ yarn test # or yarn test:watch
# PNPM
$ pnpm run type-check
# NPM
$ npm run type-check
# Yarn
$ yarn type-check
# PNPM
$ pnpm run format
# NPM
$ npm run format
# Yarn
$ yarn format
# PNPM
$ pnpm run up
# NPM
$ npm run up
# Yarn
$ yarn up
# PNPM
$ pnpm run up-latest
# NPM
$ npm run up-latest
# Yarn
$ yarn up-latest
# PNPM
$ pnpm run release-as-major
# NPM
$ npm run release-as-major
# Yarn
$ yarn release-as-major
# PNPM
$ pnpm run release-as-minor
# NPM
$ npm run release-as-minor
# Yarn
$ yarn release-as-minor
# PNPM
$ pnpm run release-as-patch
# NPM
$ npm run release-as-patch
# Yarn
$ yarn release-as-patch
# PNPM
$ pnpm run push-release
# NPM
$ npm run push-release
# Yarn
$ yarn push-release
# PNPM
$ pnpm run pull
# NPM
$ npm run pull
# Yarn
$ yarn pull
SWR
νλ‘μ νΈμ SWR μ€μΉ :
# PNPM
$ pnpm install swr
# NPM
$ npm install swr
# Yarn
$ yarn add swr
src/pages/_app.tsx
λ° src/pages/[login].tsx
μ μλ React Queryμ λͺ¨λ import λΌμΈ, provider λ° μ½λ λΈλ‘μ μ κ±°ν©λλ€.
λ°λ‘ κ·Έκ²λλ€! μ±μμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ €λ©΄ useFetch
ν¨μλ₯Ό μ¬μ©ν©λλ€.
λ°λͺ¨λ₯Ό λ³΄κ³ μΆλ€λ©΄ src/pages/[login].tsx
μμ SWR ꡬνμ λͺ¨λ import λΌμΈ λ° μ½λ λΈλ‘μ μ£Όμμ ν΄μ ν©λλ€.
λ λλ§ν μ΄μ
νλ‘μ νΈ λ£¨νΈμ src/scripts
κ²½λ‘μ babel.config.js
νμΌμ λ£κ³ .babelrc
νμΌμ μμ ν©λλ€.
pages/_app.tsx
μμ wdyr
import λΌμΈμ μ£Όμμ ν΄μ ν©λλ€.
λ°λ‘ κ·Έκ²λλ€! μ΄μ React μ¬λ λλ₯Ό λͺ¨λν°λ§ν μ μμ΅λλ€!
babel.config.js
, wdyr.ts
νμΌμ μμ νκ³ pages/_app.tsx
μμ wdyr
import λΌμΈμ μμ ν©λλ€. :
# PNPM
$ pnpm uninstall @welldone-software/why-did-you-render
# NPM
$ npm uninstall @welldone-software/why-did-you-render
# Yarn
$ yarn remove @welldone-software/why-did-you-render
ν νλ¦Ώμ ꡬ쑰μ λν΄μλ μλ νμΌ νΈλ¦¬λ₯Ό μ°Έμ‘°νμΈμ.
νμΌ νΈλ¦¬ 보기
(
**
)λ‘ νμλ ν΄λμ νμΌμ μ ν μ¬νμ΄λ―λ‘ μμ ν μ μμ΅λλ€.
π next-plate/
β£ π .github/ # GitHub's folder configs **
β£ π .husky/ # Husky's folder
β β£ π commit-msg # Commitlint git hook
β β π pre-commit # Lint-staged git hook
β£ π .vscode/ # VSCode's workspace **
β£ π public/ # Public folder
β β£ π static/ # Static files folder **
β β β£ π icons/ # Icons folder **
β β β£ π images/ # Images folder **
β β β£ π sounds/ # Sounds folder **
β β β π videos/ # Videos folder **
β β£ π docs/ # Documentation folder **
β β β£ π demo/ # Demonstrations project **
β β β π translations/ # Translations folder **
β β£ π favicon.ico # Icon tab browser
β β£ π site.webmanifest # PWA config
β£ π src/
β β£ π animations/ # Framer Motion Animations **
β β£ π components/ # App Components
β β β π Motion/ # Chakra + Framer components **
β β£ π hooks/ # React Hooks **
β β β π useFetch.ts # SWR fetch hook (optional) **
β β£ π interfaces/ # TypeScript Interfaces
β β£ π pages/ # App pages
β β£ π scripts/ # Additional scripts **
β β β£ π babel.config.js # Babel config with WDYR **
β β β π wdyr.ts # WDYR file **
β β£ π services/ # Services
β β β£ π global/
β β β β π api.ts # AXIOS config
β β β π users/
β β β£ π index.ts # React Query Configuration
β β β π keys.ts # React Query Key
β β£ π stores/ # Zustand stores
β β£ π styles/ # Styles folder
β β β£ π bgImages.ts # SVG background images **
β β β π theme.ts # Chakra-UI theme
β β π utils/ # Useful functions **
β£ π .babelrc # Default Babel config
β£ π .editorconfig # Editor config
β£ π .eslintignore # ESLint ignore
β£ π .eslintrc # ESLint config
β£ π .gitignore # Git ignore
β£ π .versionrc # Versioning config
β£ π .commitlintrc # Commitlint config
β£ π jest.config.js # Jest config
β£ π jest.setup.js # Jest setup
β£ π LICENSE # License of the project
β£ π next-env.d.ts # Next.js types to TypeScript
β£ π next-seo.config.js # Next-SEO config
β£ π next-sitemap.config.js # Next-Sitemap config
β£ π next.config.js # Next.js config
β£ π .prettierrc # Prettier config
β£ π README.md # Main README
β£ π renovate.json # Renovate Bot config **
β£ π tsconfig.json # TypeScript config
λ§μ½ μ΄ ν νλ¦Ώμ νλ‘μ νΈμ μ¬μ¬μ©νμ λ€λ©΄ νλ‘μ νΈ λ°λ₯κΈμ μ GitHub νλ‘νμ λν λ§ν¬λ₯Ό μΆκ°ν΄μ£ΌμΈμ. κ°μ¬ν©λλ€!
μ΄ νλ‘μ νΈλ MIT λΌμ΄μΌμ€μ λ°λΌ λΌμ΄μΌμ€κ° λΆμ¬λ©λλ€. μμΈν λ΄μ©μ λΌμ΄μΌμ€ νμ΄μ§λ₯Ό μ°Έμ‘°νμΈμ.