๐ŸŽฏ `unplugin-vue-components`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vue ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ „์—ญ ๋“ฑ๋กํ•˜๊ธฐ

์Š˜ยท2024๋…„ 12์›” 10์ผ

๐ŸŽฏ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

๋ชฉ๋ก ๋ณด๊ธฐ
3/3

Vue ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งค๋ฒˆ import ์—†์ด ์ž๋™์œผ๋กœ ์ „์—ญ ๋“ฑ๋กํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, unplugin-vue-components ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Vite์™€ Webpack์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, Vue 2์™€ Vue 3์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์„ค์น˜

๋จผ์ € ํ”„๋กœ์ ํŠธ์— unplugin-vue-components ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

2. Vite ์„ค์ •

Vite๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, vite.config.ts ํŒŒ์ผ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// vite.config.ts
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import Components from 'unplugin-vue-components/vite';

export default defineConfig({
  plugins: [
    vue(),
    Components({
      dirs: ['src/components'], // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ
      extensions: ['vue'], // ์‚ฌ์šฉํ•  ํŒŒ์ผ ํ™•์žฅ์ž
      deep: true, // ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ๊ฒ€์ƒ‰
    }),
  ],
});

3. Webpack ์„ค์ •

Webpack์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, webpack.config.js ํŒŒ์ผ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// webpack.config.js
const Components = require('unplugin-vue-components/webpack');

module.exports = {
  // ๊ธฐ์กด ์„ค์ •
  plugins: [
    Components({
      dirs: ['src/components'],
      extensions: ['vue'],
      deep: true,
    }),
  ],
};

4. ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉํ•˜๊ธฐ

์„ค์ •์„ ๋งˆ์นœ ํ›„, src/components ๋””๋ ‰ํ† ๋ฆฌ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ „์—ญ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๊ฐ ํŒŒ์ผ์—์„œ import ์—†์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<template>
  <div>
    <MyButton /> <!-- import ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ -->
  </div>
</template>

5. ๊ธฐํƒ€ ์„ค์ • ์˜ต์…˜

unplugin-vue-components๋Š” ๋‹ค์–‘ํ•œ ์„ค์ • ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

  • dirs: ์ปดํฌ๋„ŒํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • extensions: ๊ฒ€์ƒ‰ํ•  ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • deep: ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

6. ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 

  • ํŽธ๋ฆฌํ•จ: ์ปดํฌ๋„ŒํŠธ๋ฅผ import ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์ง‘๋‹ˆ๋‹ค.
  • ์ž๋™ํ™”: ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ์–ด, ๋งค๋ฒˆ ๋“ฑ๋กํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

  • ์ปดํฌ๋„ŒํŠธ ์ถฉ๋Œ: ์ „์—ญ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™ ๋“ฑ๋กํ•˜๋Š” ๋งŒํผ, ์ด๋ฆ„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ ์–ด๋ ค์›€: ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „์—ญ ๋“ฑ๋กํ•˜๊ฒŒ ๋˜๋ฉด, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์กŒ์„ ๋•Œ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. ๊ฒฐ๋ก 

unplugin-vue-components๋Š” Vue ํ”„๋กœ์ ํŠธ์—์„œ import ์—†์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „์—ญ์œผ๋กœ ์ž๋™ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Vite์™€ Webpack์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, ์„ค์ •๋„ ๊ฐ„๋‹จํ•˜๋ฏ€๋กœ ๋งŽ์€ Vue ํ”„๋กœ์ ํŠธ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ๋“ฑ๋ก์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ค„์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€