nuxt logo

문서 번역(비공식)

플러그인

Nuxt Kit은 플러그인을 생성하고 사용하는 데 도움이 되는 유틸리티 세트를 제공합니다. 이 함수들을 사용하여 모듈에 플러그인이나 플러그인 템플릿을 추가할 수 있습니다.

플러그인은 일반적으로 Vue에 앱 수준의 기능을 추가하는 독립적인 코드입니다. Nuxt에서는 plugins/ 디렉토리에서 플러그인이 자동으로 가져옵니다. 그러나 모듈과 함께 플러그인을 제공해야 하는 경우, Nuxt Kit은 addPluginaddPluginTemplate 메서드를 제공합니다. 이 유틸리티는 플러그인 구성을 사용자 요구에 맞게 커스터마이즈할 수 있도록 합니다.

addPlugin

Nuxt 플러그인을 등록하고 플러그인 배열에 추가합니다.

addPlugin에 대한 Vue School 비디오를 시청하세요.

사용법

import { addPlugin, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    const { resolve } = createResolver(import.meta.url)

    addPlugin({
      src: resolve('runtime/plugin.js'),
      mode: 'client',
    })
  },
})

타입

function addPlugin(plugin: NuxtPlugin | string, options?: AddPluginOptions): NuxtPlugin

매개변수

plugin: 플러그인 객체 또는 플러그인 경로를 가진 문자열. 문자열이 제공되면, 문자열 값을 src로 설정한 플러그인 객체로 변환됩니다.

플러그인 객체가 제공되면, 다음 속성을 가져야 합니다:

속성타입필수설명
srcstringtrue플러그인 파일의 경로.
mode'all' | 'server' | 'client'false'all'로 설정하면, 플러그인이 클라이언트와 서버 번들 모두에 포함됩니다. 'server'로 설정하면, 플러그인은 서버 번들에만 포함됩니다. 'client'로 설정하면, 플러그인은 클라이언트 번들에만 포함됩니다. src 옵션을 지정할 때 .client.server 수식어를 사용하여 플러그인을 클라이언트 또는 서버 측에서만 사용할 수 있습니다.
ordernumberfalse플러그인의 순서. 이는 플러그인 순서에 대한 더 세밀한 제어를 가능하게 하며, 고급 사용자만 사용해야 합니다. 낮은 숫자가 먼저 실행되며, 사용자 플러그인은 기본적으로 0입니다. order-20에서 20 사이의 숫자로 설정하는 것이 권장됩니다. -20은 Nuxt 플러그인 이전에 실행되는 pre-플러그인, 20은 Nuxt 플러그인 이후에 실행되는 post-플러그인입니다.

필요하지 않다면 order 사용을 피하세요. Nuxt 기본값 이후에 플러그인을 등록해야 하는 경우 append를 사용하세요.

options: 다음 속성을 가진 선택적 객체:

속성타입필수설명
appendbooleanfalsetrue로 설정하면, 플러그인이 플러그인 배열에 추가됩니다. false로 설정하면, 앞에 추가됩니다. 기본값은 false입니다.

예제

import { addPlugin, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    const { resolve } = createResolver(import.meta.url)

    addPlugin({
      src: resolve('runtime/plugin.js'),
      mode: 'client',
    })
  },
})

addPluginTemplate

템플릿을 추가하고 nuxt 플러그인으로 등록합니다. 이는 빌드 시 코드 생성을 필요로 하는 플러그인에 유용합니다.

addPluginTemplate에 대한 Vue School 비디오를 시청하세요.

사용법

import { addPluginTemplate, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup (options) {
    addPluginTemplate({
      filename: 'module-plugin.mjs',
      getContents: () => `import { defineNuxtPlugin } from '#app/nuxt'
export default defineNuxtPlugin({
  name: 'module-plugin',
  setup (nuxtApp) {
    ${options.log ? 'console.log("Plugin install")' : ''}
  }
})`,
    })
  },
})

타입

function addPluginTemplate(pluginOptions: NuxtPluginTemplate, options?: AddPluginOptions): NuxtPlugin

매개변수

pluginOptions: 다음 속성을 가진 플러그인 템플릿 객체:

속성타입필수설명
srcstringfalse템플릿의 경로. src가 제공되지 않으면, 대신 getContents가 제공되어야 합니다.
filenamestringfalse템플릿의 파일 이름. filename이 제공되지 않으면, src 경로에서 생성됩니다. 이 경우, src 옵션이 필요합니다.
dststringfalse대상 파일의 경로. dst가 제공되지 않으면, filename 경로와 nuxt buildDir 옵션에서 생성됩니다.
mode'all' | 'server' | 'client'false'all'로 설정하면, 플러그인이 클라이언트와 서버 번들 모두에 포함됩니다. 'server'로 설정하면, 플러그인은 서버 번들에만 포함됩니다. 'client'로 설정하면, 플러그인은 클라이언트 번들에만 포함됩니다. src 옵션을 지정할 때 .client.server 수식어를 사용하여 플러그인을 클라이언트 또는 서버 측에서만 사용할 수 있습니다.
optionsRecord<string, any>false템플릿에 전달할 옵션.
getContents(data: Record<string, any>) => string | Promise<string>falseoptions 객체와 함께 호출되는 함수입니다. 문자열 또는 문자열로 해결되는 프라미스를 반환해야 합니다. src가 제공되면, 이 함수는 무시됩니다.
writebooleanfalsetrue로 설정하면, 템플릿이 대상 파일에 작성됩니다. 그렇지 않으면, 템플릿은 가상 파일 시스템에서만 사용됩니다.
ordernumberfalse플러그인의 순서. 이는 플러그인 순서에 대한 더 세밀한 제어를 가능하게 하며, 고급 사용자만 사용해야 합니다. 낮은 숫자가 먼저 실행되며, 사용자 플러그인은 기본적으로 0입니다. order-20에서 20 사이의 숫자로 설정하는 것이 권장됩니다. -20은 Nuxt 플러그인 이전에 실행되는 pre-플러그인, 20은 Nuxt 플러그인 이후에 실행되는 post-플러그인입니다.

동적 플러그인 생성을 위해 getContents 사용을 선호하세요. 필요하지 않다면 order 설정을 피하세요.

options: 다음 속성을 가진 선택적 객체:

속성타입필수설명
appendbooleanfalsetrue로 설정하면, 플러그인이 플러그인 배열에 추가됩니다. false로 설정하면, 앞에 추가됩니다. 기본값은 false입니다.

예제

다양한 옵션으로 플러그인 템플릿 생성

빌드 시 동적으로 플러그인 코드를 생성해야 할 때 addPluginTemplate을 사용하세요. 이는 전달된 옵션에 따라 다른 플러그인 내용을 생성할 수 있게 합니다. 예를 들어, Nuxt는 내부적으로 이 함수를 사용하여 Vue 앱 구성을 생성합니다.

module.ts
import { addPluginTemplate, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup (_, nuxt) {
    if (nuxt.options.vue.config && Object.values(nuxt.options.vue.config).some(v => v !== null && v !== undefined)) {
      addPluginTemplate({
        filename: 'vue-app-config.mjs',
        write: true,
        getContents: () => `import { defineNuxtPlugin } from '#app/nuxt'
export default defineNuxtPlugin({
  name: 'nuxt:vue-app-config',
  enforce: 'pre',
  setup (nuxtApp) {
    ${Object.keys(nuxt.options.vue.config!)
        .map(k => `nuxtApp.vueApp.config[${JSON.stringify(k)}] = ${JSON.stringify(nuxt.options.vue.config![k as 'idPrefix'])}`)
        .join('\n')
    }
  }
})`,
      })
    }
  },
})

이는 제공된 구성에 따라 다른 플러그인 코드를 생성합니다.

::code-group

nuxt.config.ts
export default defineNuxtConfig({
  vue: {
    config: {
      idPrefix: 'nuxt',
    },
  },
})
#build/vue-app-config.mjs
import { defineNuxtPlugin } from '#app/nuxt'
export default defineNuxtPlugin({
  name: 'nuxt:vue-app-config',
  enforce: 'pre',
  setup (nuxtApp) {
    nuxtApp.vueApp.config["idPrefix"] = "nuxt"
  }
})

::

EJS 템플릿을 사용하여 플러그인 생성

EJS 템플릿을 사용하여 플러그인을 생성할 수도 있습니다. 옵션은 options 속성을 통해 전달되고, EJS 템플릿 내에서 플러그인 내용을 생성하는 데 사용됩니다.

import { addPluginTemplate, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup (options, nuxt) {
    const { resolve } = createResolver(import.meta.url)

    addPluginTemplate({
      src: resolve('templates/plugin.ejs'),
      filename: 'plugin.mjs',
      options: {
        ssr: nuxt.options.ssr,
      },
    })
  },
})

compatibilityVersion4로 설정하면, Nuxt는 더 이상 기본적으로 lodash.template을 사용하여 템플릿을 컴파일하지 않습니다. experimental.compileTemplate 옵션을 통해 여전히 활성화할 수 있지만, 다음 주요 버전에서는 EJS 템플릿에 대한 지원이 완전히 제거될 것입니다.