> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/web/develop-page/js/vuejs/vue-cli-3/src/main.js.md).

# main.js

## main.js

Vue application의 중심이 되는 파일이다. public 폴더에 위치하는 index.html에 있는 id가 app인 영역을 제어하도록 Vue instance를 생성하는 코드가 작성되어 있다.

<details>

<summary>main.js</summary>

```javascript
import { createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')
```

</details>

제어 대상인 index.html은 다음과 같다.

<details>

<summary>index.html</summary>

```html
<!doctype html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link rel="icon" href="/favicon.ico">
    <title>demo</title>
    <script defer="defer" src="/js/chunk-vendors.68b8cc10.js"></script>
    <script defer="defer" src="/js/app.7c122322.js"></script>
    <link href="/css/app.2cf79ad6.css" rel="stylesheet">
</head>

<body><noscript><strong>We're sorry but demo doesn't work properly without JavaScript enabled. Please enable it to
            continue.</strong></noscript>
    <div id="app"></div>
</body>

</html>
```

</details>

index.html 파일 중에서 다음 영역을 제어한다.

```markup
<div id="app"></div>
```

`import` 키워드를 통해 대상 외부 요소에서 `export`된 내용을 불러올 수 있다.

### vue 모듈 불러오기

Vue application을 생성하기 위해 필요한 함수인 createApp 함수를 vue 의존성에서 불러오기 위한 코드이다.

```javascript
import {createApp} from 'vue'
```

import 뒤에 `{ }`를 사용하는 경우는 내보낸 요소들 중에서 원하는 항목을 선택적으로 불러오기 위해 사용한다.

<div align="left"><img src="https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_TNZwLuHV9ipYLbvRq%2Fuploads%2FiiFgcHBlrfqbDlNNq9ks%2Fimage.png?alt=media&amp;token=605ba0b6-0f83-4c62-a46c-f851fe3e3005" alt=""></div>

### App.vue 불러오기

실제 처리를 수행할 `App.vue` 파일을 불러와서 application에 등록한다.

```javascript
import App from './App.vue'
createApp(App).mount('#app')
```

import 뒤에 `{ }`를 사용하지 않으면 `default`로 `export`된 항목을 불러온다.

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M_TNZwLuHV9ipYLbvRq%2Fuploads%2Fg6kvU2JFKzsJWzOpw5a7%2Fimage.png?alt=media\&token=4dbfb5cd-99a3-4cdc-9a0b-16a7e96948fd)

`App.vue` 파일을 열어서 <mark style="color:red;">export default</mark> 부분이 있는지 찾아보면 다음과 같이 존재하는 것을 확인할 수 있다.

{% code title="App.vue" %}

```javascript
...
export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
...
```

{% endcode %}

그 외에도 전체 애플리케이션에 영향을 미쳐야 하는 도구들이 있다면 `main.js` 파일에서 사용 설정할 수 있다.

### 예시 : Bootstrap 추가

#### npm

```shell
npm install bootstrap
```

#### main.js

```javascript
import 'bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';

createApp(...).mount("...");
```

bootstrap의 경우 별도로 Vue에 등록할 내용은 없으므로 import만 하면 배포 시 link와 script가 자동 생성된다.
