그랜파 개발자의 프론트엔드 공부-Vue

Vue로 PWA 개발, ChatGPT의 프론트엔드 Vue 예제를 실행해 봅시다.

그랜파 개발자 2024. 11. 18. 01:07

Vue로 PWA 개발 - 그랜파 개발자.

 

ChatGPT가 보여준 Vue 예제를 시키는 대로 했습니다.

프로젝트 만들기

1. 프로젝트 폴더를 만들어 vscode를 실행하고 터미널을 엽니다.

2. Vue CLI를 설치합니다.

npm install -g @vue/cli

3. 앱 프로젝트를 만듭니다.

vue create todo-app

 

Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, PWA, Router, Vuex
? Choose a version of Vue.js that you want to start the project with 2.x
? Use history mode for router? (Requires proper server setup for index fallback in production) Yes
? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config files
? Save this as a preset for future projects? No

 

프로젝트를 만들 때 왜 이런 선택을 했는지는 각자 알아 보시기 바랍니다. 여기서는 설명을 하지 않습니다.

4. 프로젝트 폴더로 이동

cd todo-app

5. 실행

실행해 봅시다.

npm run serve

 

npm run serve로 로컬 서버를 시작한 후 브라우저에서 http://localhost:8080으로 이동하면 앱을 볼 수 있습니다.

 

전혀 코딩을 하지 않았음에도 웹앱 페이지가 열립니다.
Home과 About link가 있습니다.

코드 분석

프로젝트 만들기에서 기본적으로 생성된 코드를 분석해 봅시다.

1. App.vue 코드를 봅시다.

<template>
  <div id="app">
    <nav>
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </nav>
    <router-view/>
  </div>
</template>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

nav {
  padding: 30px;
}

nav a {
  font-weight: bold;
  color: #2c3e50;
}

nav a.router-link-exact-active {
  color: #42b983;
}
</style>

2. router

App.vue 에 있는 홈페이지 링크 Home 를 라우터에서 찾았습니다.

// src/router/index.js 
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

3. HomeView.vue

라우터 소스 코드 src/router/index.js 에서 보면 홈페이지를 위하여 views/HomeView.vue를 사용합니다.

<!-- src/views/HomeView.vue-->
<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'HomeView',
  components: {
    HelloWorld
  }
}
</script>

4. HelloWorld.vue

HomeView.vue에서 components/HelloWorld.vue를 사용하여 홈페이지를 구성합니다.

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      For a guide and recipes on how to configure / customize this project,<br>
      check out the
      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
    </p>
    <h3>Installed CLI Plugins</h3>
    <ul>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa" target="_blank" rel="noopener">pwa</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>
    </ul>
    <h3>Essential Links</h3>
    <ul>
      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
    </ul>
    <h3>Ecosystem</h3>
    <ul>
      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

 

프로젝트 만들기를 통해 기본적으로 생성되는 코드이므로 직접 프로젝트를 만들어 확인해 보시기 바랍니다. 앱 개발에 대한 구조적인 권고 사항이 모두 있는 것 같습니다. 이렇게 예제 코드를 제공하는 이유는 아무래도 이런 방식으로 프로젝트를 구성하기를 권하는 것이겠지요.

 

ChatGPT가 제공한 코드를 적용하여 봅시다.

 

Vue 프로젝트 Beta Test : mylog, 일상의 기록