React

[React] vite로 프로젝트 template 만들기

주니야 공부하자 2024. 12. 29. 00:18

vite 프로젝트 생성

npm create vite@latest

 

의존성 설치

npm i

 

prettier 설치

npm install --save-dev --save-exact prettier

 

.prettierrc 파일 생성

{
  "singleQuote": true,
  "semi": false,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 80,
  "bracketSpacing": true,
  "arrowParens": "avoid",
  "endOfLine": "auto"
}

 

eslint config prettier 설치

npm install --save-dev eslint-config-prettier

 

eslint.config.js 파일에 추가

import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'
import eslintConfigPrettier from 'eslint-config-prettier'

export default tseslint.config(
  { ignores: ['dist'] },
  {
    extends: [js.configs.recommended, ...tseslint.configs.recommended],
    files: ['**/*.{ts,tsx}'],
    languageOptions: {
      ecmaVersion: 2020,
      globals: globals.browser,
    },
    plugins: {
      'react-hooks': reactHooks,
      'react-refresh': reactRefresh,
    },
    rules: {
      ...reactHooks.configs.recommended.rules,
      'react-refresh/only-export-components': [
        'warn',
        { allowConstantExport: true },
      ],
    },
    eslintConfigPrettier,
  },
)

 

tailwind 설치

 

Install Tailwind CSS with Vite - Tailwind CSS

Setting up Tailwind CSS in a Vite project.

tailwindcss.com

 

auto import 설치

npm install -D unplugin-auto-import

 

auto router 설치

npm install -D vite-plugin-pages

 

auto component 설치

npm install -D unplugin-react-components

 

react router dom 설치

npm install react-router-dom

 

material ui 설치

npm install @mui/material @emotion/react @emotion/styled

 

main.tsx

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import './index.css'
import App from './App.tsx'

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </StrictMode>,
)

 

App.tsx

import routes from '~react-pages'
import './App.css'

function App() {
  const element = useRoutes(routes)
  return element
}

export default App

 

pages.d.ts 파일 생성(~react-pages의 type 오류를 잡기 위함)

declare module '~react-pages' {
  import { RouteObject } from 'react-router-dom'

  const routes: RouteObject[]
  export default routes
}

 

tsconfig.app.json

{
  "compilerOptions": {
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "isolatedModules": true,
    "moduleDetection": "force",
    "noEmit": true,
    "jsx": "react-jsx",

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedSideEffectImports": true,

    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["src", "auto-imports.d.ts", "components.d.ts", "pages.d.ts"]
}

 

vite.config.ts

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import AutoImport from 'unplugin-auto-import/vite'
import Pages from 'vite-plugin-pages'
import Components from 'unplugin-react-components/vite'
import { MuiResolver } from 'unplugin-react-components'
import path from 'node:path'

export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  plugins: [
    react(),
    AutoImport({
      imports: ['react', 'react-router-dom'],
      dts: true,
    }),
    Pages({
      dirs: [{ dir: './src/pages', baseRoute: '' }],
      extensions: ['jsx', 'tsx'],
    }),
    Components({
      dts: true,
      resolvers: [MuiResolver()],
    }),
  ],
})