Vue.js 3 의 기본적인 사용법을 설명합니다. Vue2 에서 Options API를 통해 개발했다면, Vue3 에서는 Composion API로 개발을 하게 됩니다. 보통, Composion API로 만들게 되면, Setup() 함수에 구현을 하는데요, 여기서는 Setup()함수를 사용하지 않습니다. 대신, script 태그 선언시에 setup 옵션을 추가합니다. 이렇게 하면 코드를 더욱 간결하게 작성할 수 있습니다.

 

  • 개발환경 구성과 프로젝트 생성 (Hello World)
  • 폴더와 파일에 대한 설명
  • 뷰 데이터와 함수
  • 데이터 바인딩
  • 이벤트
  • 데이터 양방향 바인딩
  • Computed 속성
  • Watch 속성
  • 클래스&스타일 바인딩
  • v-if와 v-show
  • v-for 리스트렌더링
  • 여러개의 Vue 인스턴스 사용하기
  • Vue 컴포넌트
  • 뷰 라우터 ( yarn add "vue-router@^4.0.0" )
  • 싱글 파일 콤포넌트
  • 자식 컴포넌트에 데이터 보내기
  • 부모 컴포넌트로 데이터 보내기
  • 슬롯
  • 뷰 인스턴스 라이프사이클
  • 미니 프로젝트 (단어장 1)
  • 미니 프로젝트 (단어장 2)
  • Context

 

path 를 "/abc/:id" 와 같은 식으로 정의하고, "/abc/1" 페이지에서 "/abc/2" 페이지를 호출하려는 경우에 페이지가 리로드되지 않는다. 이런 경우, 아래와 같이 해주면 해결될 것이다.

 

<template>
  <router-view :key="route.fullPath" />
</template>

<script setup>
import { useRoute } from "vue-router";
const route = useRoute();
</script>

 

Vite + Vue3 + Javascript + Electron 를 이용하여 데스크탑앱 개발 환경을 설정해보자. 참고했던 문서에서는 Typescript 로 되어 있었는데, 필자는 아직 Javascript를 쓰고 싶다. ^^;


Step 1. Vite 프로젝트 생성하기

> yarn create vite
yarn create v1.22.17
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...

success Installed "create-vite@2.7.2" with binaries:
      - create-vite
      - cva
√ Project name: ... vite-project
√ Select a framework: » vue
√ Select a variant: » vue

Scaffolding project in C:\Mattabu\Study\Vue\vite-project...

Done. Now run:

  cd vite-project
  yarn
  yarn dev

Done in 12.26s.

yarn create vite 를 실행하면 프로젝트를 설정하는 프롬프트가 나온다. 프로젝트명을 vite-project로 입력하고 vue 프레임워크를 사용한다고 선택하고 variant도 Javascript( vue )를 사용한다고 선택했다.

 

Step 2. 프로젝트 폴더로 이동한 후에 Electron 모듈 및 종속성 모듈 설치

# 프로젝트 폴더로 이동
> cd vite-project

# electron 모듈 설치
> yarn add -D concurrently cross-env electron electron-builder wait-on

# 프로젝트 종속성 모듈 설치
> yarn

 

Step 3. package.json 파일 수정

build 속성 추가 (electron build에서 자세한 내용 확인할 수 있다.)

  "build": {
    "appId": "com.my-website.my-app",
    "productName": "MyApp",
    "copyright": "Copyright © 2019 ${author}",
    "mac": {
      "category": "public.app-category.utilities"
    },
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true
    },
    "files": [
      "dist/**/*",
      "electron/**/*"
    ],
    "directories": {
      "buildResources": "assets",
      "output": "dist_electron"
    }
  }

 

scripts 속성 수정/추가

  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "serve": "vite preview",
    "electron": "wait-on tcp:3000 && cross-env IS_DEV=true electron .",
    "electron:pack": "electron-builder --dir",
    "electron:dev": "concurrently -k \"cross-env BROWSER=none yarn dev\" \"yarn electron\"",
    "electron:builder": "electron-builder",
    "build:for:electron": "cross-env ELECTRON=true vite build",
    "app:build": "yarn build:for:electron && yarn electron:builder"
  },

 

main, license, author 등 속성 추가

{
  "name": "vite-electron-app-test",
  "author": "Gauryan",
  "license": "MIT",
  "version": "0.0.0",
  "main": "electron/electron.js",
  ...
}

 

Step 4. vite.config.js 파일 수정

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  base: process.env.ELECTRON=="true" ? './' : ".",
  plugins: [vue()]
})

 

Step 5. electron/electron.js 파일 생성

// electron/electron.js
const path = require('path');
const { app, BrowserWindow } = require('electron');

const isDev = process.env.IS_DEV == "true" ? true : false;

function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true,
    },
  });

  // and load the index.html of the app.
  // win.loadFile("index.html");
  mainWindow.loadURL(
    isDev
      ? 'http://localhost:3000'
      : `file://${path.join(__dirname, '../dist/index.html')}`
  );
  // Open the DevTools.
  if (isDev) {
    mainWindow.webContents.openDevTools();
  }
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
});

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

 

Step 6. electron/preload.js 파일 생성

// electron/preload.js

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
    const replaceText = (selector, text) => {
      const element = document.getElementById(selector)
      if (element) element.innerText = text
    }

    for (const dependency of ['chrome', 'node', 'electron']) {
      replaceText(`${dependency}-version`, process.versions[dependency])
    }
  })

 

Step 7. 개발모드 실행 및 빌드

# Run yarn electron:dev to work with electron in development mode.
> yarn electron:dev

# Run yarn app:build to build your electron app.
> yarn app:build

 

Step 8. 참고

https://dev.to/brojenuel/vite-vue-3-electron-5h4o

 

Vite + Vue 3 + electron + TypeScript

A lot of people have been asking how to do electron in vite vue 3 so here it is. Step...

dev.to

https://learnvue.co/2021/05/build-vue-3-desktop-apps-in-just-5-minutes-vite-electron-quick-start-guide/#setting-up-our-electron-main-js

 

Building a Vue 3 Desktop App with Vite and Electron

Level up your Vue development with tutorials for all experience levels!

learnvue.co

 

전체목차 : https://gauryan.tistory.com/214

 

이제 생성한 프로젝트의 구조에 대해 간단하게 알아볼 시간입니다. 먼저, VSCode 의 왼쪽에서 프로젝트 폴더를 봅시다. 이렇게 생겼어요.

node_modules 폴더가 먼저 보이네요. 이 폴더에는 내가 설치한 node 모듈들이 있는 장소입니다. 처음 용량이 거의 160MB로 꽤 큽니다. package.json 에 필요한 패키지 목록을 가지고 있어서, node_modules 폴더가 없더라도, 다시 만들수가 있습니다. 그래서, git에는 저장하지 않도록 설정되어 있어요.

 

public 폴더의 index.html 도 봅시다. 여기에서 눈여겨 볼 곳은 app 으로 id를 설정한 부분입니다. 이 곳에 우리가 작성한 코드들이 자동으로 들어가게 되는데요. 자동으로 관리되는 부분이므로, index.html 파일을 직접 건드리지 않는 것이 좋습니다.

이제 가장 중요한 src 폴더를 보겠습니다. 이 밑에는 main.js, App.vue, assets 폴더, components 폴더가 있네요. main.js 는 프로그램의 진입점이 될 것입니다. App 컴포넌트를 호출해서, 위에서 보았던 app 에 마운트를 합니다. 이 파일도 거의 수정할 일이 없지만, 간혹 전역으로 적용되어야 할 js 파일이나 css 파일을 import하는 경우가 있습니다. 이미 지난 시간에 Bootstrap 을 위해서 추가했었지요.

그리고, App.vue 는 메인 컴포넌트입니다. Vue는 컴포넌트 기반의 프론트엔드 프레임워크 입니다. Vue 뿐만 아니라, React, Svelte 등도 컴포넌트 기반입니다. 하나의 페이지도 컴포넌트이고 페이지를 구성하는 다양한 영역도 컴포넌트로 구성할 수 있습니다. Vue에서 컴포넌트는 ~.vue 라는 확장명으로 만들어집니다. 파일 하나가 컴포넌트입니다. React의 경우는 클래스 기반, 함수 기반의 컴포넌트여서, 한 개의 파일에 여러개의 컴포넌트를 만들 수 있다는 점에서 차이가 있습니다. 컴포넌트를 만들어 놓으면 재사용하기에 좋습니다.

 

assets 폴더에는 이미지를 넣어서 사용하면 됩니다. 그리고, components 에는 폴더명처럼 재사용할 수 있는 컴포넌트를 작성해서 넣으시면 되겠습니다. 

 

여기에서는 기본으로 만들어주지 않았지만, 보통 views 또는 pages라는 폴더도 만들어 주게 됩니다. 말 그대로 페이지를 표현하는 컴포넌트를 작성하는 폴더입니다. 우리는 views 폴더를 만들어두겠습니다.

+ Recent posts