์‹œ์ž‘ํ•˜๋ฉฐ

๋งค ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ๋งˆ๋‹ค ํ•˜๋Š” ๊ณ ๋ฏผ โ€˜๊ณตํ†ต ๋ชจ๋“ˆ์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ?โ€™. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ๋„ ์–ด๊น€์—†์ด ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•ด๋ณด์•˜๋‹ค. ๊ทœ๋ชจ๊ฐ€ ๊ฝค ์žˆ๋Š” Vue ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ ๋‹จ๊ณ„๋ถ€ํ„ฐ ์ฐธ์—ฌํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์•„ํ‹ฐํด์„ ์ฐพ์•„๋ณด์•˜๋‹ค.

[ํ™˜๊ฒฝ]

Vue2 + Nuxt.js

ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ

Vue ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  js ํŒŒ์ผ์„ /assets /plugins ์ด๋‚˜ ์„ ํ˜ธํ•˜๋Š” ๊ณณ์— ๋งŒ๋“ค์–ด์ค€๋‹ค.

import Vue from 'vue'
import { store } from "~/store";

Vue.use(MyPlugin)

MyPlugin.install = (Vue) => {
  Vue.getBlabla = () => {
    return store.getBlabla
  }
}

์‚ฌ์šฉ์€ ์ด๋ ‡๊ฒŒ

this.$getBlabla()

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Nuxt ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. Nuxt์—์„œ ์ œ๊ณตํ•˜๋Š” inject ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด๋ฐ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

export default ({ app }, inject) => {
  inject('getBlabla', msg => console.log(`blabla ${msg}!`))
}

๋‚ด๊ฐ€ ์œ„ ๋ฐฉ๋ฒ•๋Œ€๋กœ ์‹œ๋„ํ•˜๋‹ค๋ณด๋‹ˆ Typescript์˜ ๋ฒฝ์— ๋ถ€๋”ชํ˜”๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์˜ค๋Š” Vue์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ผ๊ณ  ํ•˜๋Š”๋ฐ any๋Š” ์ ˆ๋Œ€ ์“ฐ๊ธฐ ์‹ซ์–ด์„œ ,, ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค. img.png

Nuxt Typescript ๊ณต์‹ ๋ฌธ์„œ์—์„œ plugins๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฐ€์ด๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋งํ•˜์ž๋ฉด ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์„ฑ๊ณตํ–ˆ๋‹ค !! ๐Ÿ’ช๐Ÿป Vue ์ธ์Šคํ„ด์Šค์— ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ context์— ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๊ณตํ†ต ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ์—” Vue ์ธ์Šคํ„ด์Šค์— ์ฃผ์ž…ํ•ด๋„ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

  1. plugin ํŒŒ์ผ ์ƒ์„ฑ

nuxt ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์˜ plugins ๋ผ๋Š” ํด๋” ํ•˜์œ„์— {pluginsํŒŒ์ผ๋ช…}.ts ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.

import Vue from 'vue'

declare module 'vue/types/vue' {
  interface Vue {
    $myInjectedFunction(message: string): void
  }
}

Vue.prototype.$myInjectedFunction = (message: string) => console.log(message)
  1. nuxt.config.js ํŒŒ์ผ ์ˆ˜์ •
plugins: [
  ...์ค‘๋žต...
   '~/plugins/{pluginsํŒŒ์ผ๋ช…}'
],
  1. ์‚ฌ์šฉ
${ํ•จ์ˆ˜๋ช…}()

Refer

https://song8420.tistory.com/385?category=891243
https://kr.vuejs.org/v2/guide/plugins.html
https://typescript.nuxtjs.org/cookbook/plugins/

๋งˆ์น˜๋ฉฐ

๋ฆฌ์„œ์น˜ ํ›„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ Nuxt + TypeScript์˜ ๋ฒฝ์— ๋ถ€๋”ชํ˜€ ์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์‹คํŒจํ–ˆ๋‹ค.. (์กฐ๊ธˆ ๋” ๋ฆฌ์„œ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.)
ํ•จ์ˆ˜ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐœ์„  ํฌ์ธํŠธ๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

1. A ์ปดํฌ๋„ŒํŠธ, B ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ผํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค.

๋™์ผํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด๋†“๊ณ  ์ถ”ํ›„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ๊ฐ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•œ ๊ณณ๋งŒ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ ๋†“์น˜๋Š” ํฌ์ธํŠธ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

2. ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
3. (์ถ”ํ›„) ๊ฐ ๊ธฐ๋Šฅ๋ณ„ ๊ณตํ†ตํ•จ์ˆ˜๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” plugin ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค๋ฉด ํŠน์ • ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋“ค์„ ํ•œ ํŒŒ์ผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.