Vue 플러그인 사용법 / 전역 컴포넌트, 리소스, 커스텀 디렉티브 등록 방법

Vue 플러그인이란?

Vue 애플리케이션에 전역 기능 및 객체 등을 추가하는 확장 도구입니다.
Vue Router, Vuex, Pinia 등도 Vue 플러그인입니다.


Vue 커스텀 플러그인 생성 방법

Vue 플러그인 JS 파일은 /src/plugins 폴더 안에 작성하는 것이 관례입니다.

플러그인 객체 정의 방법

const 플러그인객체명 = {
  install(app, options) {
    // app : Vue 애플리케이션 인스턴스
    // options : 플러그인 설치 시 넘긴 옵션 파라미터

    // 플러그인 설치 시 자동 실행
  }
}

export default 플러그인객체명;

Vue 플러그인을 객체 형태로 작성 시, install 함수를 파라미터로 사용해야 합니다.

플러그인 함수 정의 방법

function 플러그인함수명(app, options) {
  // 플러그인 설치 시 자동 실행
}

export default 플러그인함수명;

Vue 플러그인 설치 방법

import { createApp } from 'vue';
import App from './App.vue';
import 플러그인객체명 from './plugins/플러그인객체파일명';
import 플러그인함수명 from './plugins/플러그인함수파일명';

const app = createApp(App);
app.use(플러그인객체명); 또는 app.use(플러그인객체명, {파라미터키 : 값});
app.use(플러그인함수명);
app.mount('#app');

main.js 파일 app 인스턴스에 플러그인 사용 등록하면 전역에서 사용할 수 있습니다.


Vue 플러그인 사용법

전역 속성 및 메서드 추가 방법

const 플러그인객체명 = {
  install(app, options) {
    // 플러그인 설치 시 자동 실행

    const 객체명 = {
      키: '값',
      함수명() {
        console.log(this.키);
      },
      ...options // 플러그인 설치 시 받은 파라미터도 객체에 등록 가능 (기존에 같은 키가 있으면 값이 덮어씌워짐)
    };

    app.config.globalProperties.$객체명 = 객체명;
  }
}

위와 같이, app.config.globalProperties 속성에 객체를 추가하여 플러그인을 정의합니다.
해당 플러그인을 Vue 앱 인스턴스에 사용 등록하면 앱 실행 시 자동 실행됩니다.

전역 속성 및 메서드 사용법

<template>
  <h2></h2>
</template>
<script>
export default {
  created() {
    // Options API created 라이프사이쿨 훅에서 전역 속성 사용 예시
    console.log(this.$객체명.키);

    this.$객체명.함수명();
  }
}
</script>
<script setup>
</script>

Options API에서 setup 이후, 컴포넌트가 생성되면 this로 전역 속성을 사용할 수 있습니다.

전역 리소스 추가 방법

const 플러그인객체명 = {
  install(app, options) {
    // 플러그인 설치 시 자동 실행

    const 객체명 = {
      키: '값',
      함수명() {
        console.log(this.키);
      }
    };

    app.provide('객체명', 객체명);
  }
}

위와 같이, app 인스턴스 provide 함수로도 전역 리소스를 등록할 수 있습니다.
main.js에서 앱 인스턴스에 플러그인을 설치하면 적용됩니다.

전역 리소스 사용법

<template>
  <h2></h2>
  <button @click="객체명.함수명">버튼명</button>
</template>
<script setup>
const 객체명 = inject('객체명');
console.log(객체명.키);
</script>

플러그인에서 provide로 등록한 전역 리소스는 inject 함수로 받을 수 있습니다.

글로벌 컴포넌트 추가 방법

import App컴포넌트명1 from '@/components/app/App컴포넌트명1.vue';
import App컴포넌트명2 from '@/components/app/App컴포넌트명2.vue';

export default {
  install(app) {
    app.component('App컴포넌트명1', App컴포넌트명1);
    app.component('App컴포넌트명2', App컴포넌트명2);
  },
}

/src/plugins 폴더 안에 global-components.js 플러그인 파일 생성 후,
app 인스턴스 component 함수로 여러 컴포넌트에서 사용할 전역 컴포넌트들을 등록합니다.
main.js에서 플러그인을 설치하면, 각 컴포넌트에서 전역 컴포넌트들을 import문 없이 사용할 수 있습니다.

전역 커스텀 디렉티브 추가 방법

전역 커스텀 디렉티브 객체 정의 방법

export default {
  mounted(el) {
    // mounted 시, input DOM 엘리먼트를 받아서 포커스 시키는 커스텀 디렉티브 예시
    el.focus();
  }
}

src/directives 폴더 안에 커스텀디렉티브명.js 파일을 정의합니다.
커스텀 디렉티브를 객체 형태로 정의하면 mounted, updated 등 여러 훅을 사용할 수 있습니다.

전역 커스텀 디렉티브 함수 정의 방법

export default function(el, binding) {
  // v-커스텀디렉티브명="값" 형태로 넘긴 값을 DOM 엘리먼트 CSS로 적용하는 커스텀 디렉티브 예시
  el.style.color = binding.value;

  // 객체 값 사용 : binding.value.키1, binding.value.키2
  // 전달인자 사용 : binding.arg
  // 수식어 사용 : binding.modifiers
}

src/directives 폴더 안에 커스텀디렉티브명.js 파일을 정의합니다.
커스텀 디렉티브를 함수 형태로 정의하면 mounted 훅만 사용할 수 있습니다.

전역 커스텀 디렉티브 등록 방법

import { createApp } from 'vue';
import App from './App.vue';
import 커스텀디렉티브명 from './directives/커스텀디렉티브명.js';

const app = createApp(App);
app.directive('커스텀디렉티브명', 커스텀디렉티브명);
app.mount('#app');

위와 같이, main.js에서 app 인스턴스 directive 함수로 커스텀 디렉티브를 전역 등록할 수 있습니다.

전역 커스텀 디렉티브 다중 등록 플러그인 정의

import 커스텀디렉티브명1 from './directives/커스텀디렉티브명1.js';
import 커스텀디렉티브명2 from './directives/커스텀디렉티브명2.js';

export default{
  install(app) {
    app.directive('커스텀디렉티브명1', 커스텀디렉티브명1);
    app.directive('커스텀디렉티브명2', 커스텀디렉티브명2);
  }
}

src/plugins 폴더 안에 global-directives.js 플러그인 파일을 정의합니다.
main.js에서 플러그인을 설치하면, 여러 커스텀 디렉티브를 한번에 전역 등록할 수 있습니다.