다른 설치 없이 순수 Vue를 통해 개발하는 것에는 아쉬운 부분이 많다.
이 같은 기능을 사용하고 싶을때, 우리는 Vue CLI를 활용할 수 있다.
npm run serve: 서버 시작ctrl + C: 서버 종료my-vue-project/
├── node_modules/
├── public/
│ ├── index.html
│ └── favicon.ico
├── src/
│ ├── assets/
│ │ └── logo.png
│ ├── components/
│ │ └── HelloWorld.vue
│ ├── views/
│ │ └── Home.vue
│ ├── App.vue
│ └── main.js
├── babel.config.js
├── package.json
├── package-lock.json
├── README.md
├── vue.config.js
└── ...
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app')
import : 한 파일에서 다른 파일로 코드를 불러오는 모던 javascript 기능Vue.createApp을 통해 app을 만들지 않고 import { createApp } from 'vue'를 통해 Vue 프레임워크로부터 createApp 메서드와 같이 항목을 불러와 사용한다.App.vue 코드 자체에는 브라우저에서 작동하지 않을 코드가 있으나, Vue CLI가 백그라운드에서 코드를 변환하여 최종적으로 유저의 브라우저에서 작동하도록 변환해준다.지금까지 app을 생성해온 방식.
<template></>
<script>
const app = {
data() {
return {
friends: []
}
}
}
</script>
import { createApp } from 'vue';
createApp({}).mound('#app);
이 app 코드가 main.js의 구성 객체가 되도록 할 것이다. 어떻게 이 구성 객체를 main.js의 createApp 메서드에 넣을 수 있을까? import를 사용하면 된다.
import 불러올 객체 이름(자유롭게 지정 가능. 일반적으로는 파일명과 통일) from '불러올 파일 경로(./상대주소)'
- vue 패키지에서 불러오는것이 아닌 커스텀 파일인 경우 파일 경로를 지정해줘야 한다.
import App from './App.vue'
createApp(app).mount('#app');
이 코드 수정으로 우리는 이제 App 코드(javascript 객체)를 createApp으로 전달 가능하게 되었다. 그러나 현재는 이를 내보내고있지 않다. 상수(const)에 코드를 저장하면 해당 파일에서만 사용가능하고 다른 파일에선 사용할 수 없기 때문이다. 대신, javascript의 기본 구문인 export default 키워드를 사용할 수 있다.
<template></template>
<script>
export default {
data() {
return {
friends: []
}
}
}
</script>
Vue에는 앱이 있고 컴포넌트가 있다.
vue App
App.vue: 매인 Vue 앱
vue Component
<template>
<li>
<h2>{{ frind.name }}</h2>
<button @click="toggleDetails">Show Details</button>
<ul>
<li><strong>Phone:</strong>{{ friend.phone }}</li>
<li><strong>Email:</strong>{{ friend.email }}</li>
</ul>
</li>
</template>
<script>
export default {
data() {
return { //이 컴포넌트에만 고유하게 해당되는 데이터
detailsAreVisible: false,
friend: {
id: 'manuel',
name: 'YoungJin Lee',
phone: '123456789',
email: 'YoungJin@localhost.com'
}
}
},
methods: {
toggleDetails() {
this.detailsAreVisible = !this.detailsAreVisible
}
}
}
</script>
이렇게 컴포넌트 코드 하나를 작성해보았다.
이제 이 컴포넌트를 main.js에 등록해보자!
import { createApp } from 'vue';
import App from './App.vue';
import FriendContact from "@/components/FriendContact.vue";
const app = createApp(App);
app.component('friend-contact', FriendContact);
app.mount('#app');
이제 App.vue에서 frined-contact 컴포넌트를 사용할 수 있게 되었다.
즉, 커스텀 HTML 요소를 사용할 수 있게 된 것이다.
<template>
<section>
<h2>My Friends</h2>
<ul>
<friend-contact></friend-contact>
<friend-contact></friend-contact>
</ul>
</section>
</template>
Udemy:【한글자막】 Vue - 완벽 가이드 (Router 및 Composition API 포함)