์ ๋ฒ ๊ธ์์ ๋ค๋ค๋ Vue 3์์์ ์ฐ์ฅ์ ์ ๋๋ค๐ฅฐ
https://velog.io/@buddle6091/23.02.10-Vue-3..-%EC%9D%B4%EC%A0%84-%EB%B2%84%EC%A0%84%EA%B3%BC%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%AC%EB%9D%BC%EC%A1%8C%EC%9D%84%EA%B9%8C
Vue 3์ ๊ดํ์ฌ๋ ์์ ํฌ์คํ ์์ ๋ค๋ฃฌ ๋ถ๋ถ์ด ์์ด ์ค๋์ ํด๋น ํ๋ ์์ํฌ๋ฅผ ์ค์นํ์ ์์ ํ๊ฒฝ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ์ด ๋์ด์๋์ง ๋ณด๋ ค๊ณ ํ๋ค!
npm init vue@latest
๋ช
๋ น์ด๋ก ํตํด ํด๋น Vue ํ๋ก์ ํธ๋ฅผ ํ์
์คํฌ๋ฆฝํธ๋ก ์์
์ ํ ๊ฒ์ธ์ง ์ค์ ์ ํ๊ฒ๋๋ค.
โ Project name: โฆ <your-project-name>
โ Add TypeScript? โฆ No / Yes --> Yes for set typescript
โ Add JSX Support? โฆ No / Yes
โ Add Vue Router for Single Page Application development? โฆ No / Yes
โ Add Pinia for state management? โฆ No / Yes
โ Add Vitest for Unit testing? โฆ No / Yes
โ Add Cypress for both Unit and End-to-End testing? โฆ No / Yes
โ Add ESLint for code quality? โฆ No / Yes
โ Add Prettier for code formatting? โฆ No / Yes
Scaffolding project in ./<your-project-name>...
Done.
์ด๋ฌํ ์์ ์ ๊ฑฐ์น๋ฉด ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ Vue 3 ํ๋ก์ ํธ ์ด๊ธฐ ๊ตฌ์ฑ์ด ์๋ฃ๊ฐ ๋๋ค.
์์ ํฌ์คํธ์์ ๋งํ๋ฏ์ด, Vue 3์ ๋ฒ๋ค๋ฌ๋ก Webpack ๋์ vite
๋ฅผ Default๋ก ์ ๊ณตํ๋ค.
webpack.config ํ์ผ์ด ์กด์ฌํ๋ฏ์ด, Vite ๋ํ vite.config ํ์ผ์ด ์์ฑ๋์ด ์ฌ๊ธฐ์ ๋ฒ๋ค๋ง ๊ด๋ จ ์ค์ ์ ํ ์ ์๊ฒ ๋๋ค.
// vite.config.ts
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
ํ์ฌ ํ๋ก์ ํธ๋ Vue๋ก ์ค์ ๋์ด์๊ธฐ์ defineConfig๋ผ๋ ์ค์ ์ญํ ์ ํ๋ ๊ฐ์ฒด์ plugin: [vue()]
๋ก ์ ํ์ ธ ์๋ค.
๊ทธ๋ฆฌ๊ณ resolve.alias ํตํด์๋ ./src
ํด๋ ๋ด์์ @
์ผ๋ก import ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ปดํฌ๋ํธ์ ์ฃผ์๋ฅผ ๊ฐ๋ตํ๊ฒ ํ ์ ์๊ฒ ํด๋น ์ค์ ์ผ๋ก ๊ฐ๋ฅ์ผ ํด์ค๋ค.
vscode์ ํ์
์คํฌ๋ฆฝํธ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ vue 3๋ volar
๋ฅผ ์ค์นํ๊ณ ctrl + space
๋ฅผ ํ๊ฒ ๋๋ฉด ๊ด๋ จ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ฐ, ์ด ์ค์ ์ ์ด์ฉํ๊ฒ ๋๋ฉด ๋ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๋ค.
๋ผ์ฐํฐ๋ ์ด์ ๋ฒ์ ๊ณผ ๊ฐ์ด npm install vue-router
๋ก ์ค์น๊ฐ ๊ฐ๋ฅํ๋ค.
์ถํ์ ์ ์ง๋ณด์ ์ฉ์ด๋ฅผ ์ํด ํ์์ ๊ฒฝ์ฐ src/router/index.ts
์ ๋ฃจํธ๋ก ๋ผ์ฐํฐ ํด๋๊ตฌ์กฐ๋ฅผ ์ค๊ณํ์๋ค.
๊ทธ ๋ค์ index.ts ์์ ๋ผ์ฐํฐ ํ์ด์ง ๋ณ๋ก ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
import { createRouter, createWebHistory } from "vue-router";
const routes: Array<any> = [
{
path: "/",
component: () => import("../pages/Home.vue"),
},
{
path: "/2",
component: () => import("../pages/Page2.vue"),
},
{
path: "/3",
component: () => import("../pages/Page3.vue"),
},
];
export default createRouter({
history: createWebHistory(),
routes,
});
์ฌ๊ธฐ์ ์๋ RouteRecordRaw ๋ผ๋ ํ์ ์ด any ๋์ ๋ค์ด๊ฐ์ผํ์ง๋ง, ๊ณ์ํด์ ์ธ์ ์ค๋ฅ๊ฐ ์ผ์ด๋์ ์ผ๋จ Any๋ก ๋์ฒดํ๋ค.. ์กฐ๋ง๊ฐ ํด๊ฒฐ์ ์ ์ฐพ์๋ณผ ์์ ์ด๋ค.
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router/index";
import "./assets/main.css";
createApp(App).mount("#app");
๊ทธ๋ฆฌ๊ณ App.vue
์์๋ ๋ผ์ฐํฐ๋ฅผ ์ ์ญ์ผ๋ก ๋ฟ๋ ค์ค์ผ๋๊ธฐ์ ์ค์ ์ ํด์ค๋ค.
<template>
<Header />
<router-view></router-view>
<SideBar />
</template>