플러그인
Nuxt Kit은 플러그인을 생성하고 사용하는 데 도움이 되는 유틸리티 세트를 제공합니다. 이 함수들을 사용하여 모듈에 플러그인이나 플러그인 템플릿을 추가할 수 있습니다.
플러그인은 일반적으로 Vue에 앱 수준의 기능을 추가하는 독립적인 코드입니다. Nuxt에서는 plugins/
디렉토리에서 플러그인이 자동으로 가져옵니다. 그러나 모듈과 함께 플러그인을 제공해야 하는 경우, Nuxt Kit은 addPlugin
과 addPluginTemplate
메서드를 제공합니다. 이 유틸리티는 플러그인 구성을 사용자 요구에 맞게 커스터마이즈할 수 있도록 합니다.
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
로 설정한 플러그인 객체로 변환됩니다.
플러그인 객체가 제공되면, 다음 속성을 가져야 합니다:
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
src | string | true | 플러그인 파일의 경로. |
mode | 'all' | 'server' | 'client' | false | 'all' 로 설정하면, 플러그인이 클라이언트와 서버 번들 모두에 포함됩니다. 'server' 로 설정하면, 플러그인은 서버 번들에만 포함됩니다. 'client' 로 설정하면, 플러그인은 클라이언트 번들에만 포함됩니다. src 옵션을 지정할 때 .client 와 .server 수식어를 사용하여 플러그인을 클라이언트 또는 서버 측에서만 사용할 수 있습니다. |
order | number | false | 플러그인의 순서. 이는 플러그인 순서에 대한 더 세밀한 제어를 가능하게 하며, 고급 사용자만 사용해야 합니다. 낮은 숫자가 먼저 실행되며, 사용자 플러그인은 기본적으로 0 입니다. order 를 -20 에서 20 사이의 숫자로 설정하는 것이 권장됩니다. -20 은 Nuxt 플러그인 이전에 실행되는 pre -플러그인, 20 은 Nuxt 플러그인 이후에 실행되는 post -플러그인입니다. |
필요하지 않다면 order
사용을 피하세요. Nuxt 기본값 이후에 플러그인을 등록해야 하는 경우 append
를 사용하세요.
options
: 다음 속성을 가진 선택적 객체:
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
append | boolean | false | true 로 설정하면, 플러그인이 플러그인 배열에 추가됩니다. 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
: 다음 속성을 가진 플러그인 템플릿 객체:
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
src | string | false | 템플릿의 경로. src 가 제공되지 않으면, 대신 getContents 가 제공되어야 합니다. |
filename | string | false | 템플릿의 파일 이름. filename 이 제공되지 않으면, src 경로에서 생성됩니다. 이 경우, src 옵션이 필요합니다. |
dst | string | false | 대상 파일의 경로. dst 가 제공되지 않으면, filename 경로와 nuxt buildDir 옵션에서 생성됩니다. |
mode | 'all' | 'server' | 'client' | false | 'all' 로 설정하면, 플러그인이 클라이언트와 서버 번들 모두에 포함됩니다. 'server' 로 설정하면, 플러그인은 서버 번들에만 포함됩니다. 'client' 로 설정하면, 플러그인은 클라이언트 번들에만 포함됩니다. src 옵션을 지정할 때 .client 와 .server 수식어를 사용하여 플러그인을 클라이언트 또는 서버 측에서만 사용할 수 있습니다. |
options | Record<string, any> | false | 템플릿에 전달할 옵션. |
getContents | (data: Record<string, any>) => string | Promise<string> | false | options 객체와 함께 호출되는 함수입니다. 문자열 또는 문자열로 해결되는 프라미스를 반환해야 합니다. src 가 제공되면, 이 함수는 무시됩니다. |
write | boolean | false | true 로 설정하면, 템플릿이 대상 파일에 작성됩니다. 그렇지 않으면, 템플릿은 가상 파일 시스템에서만 사용됩니다. |
order | number | false | 플러그인의 순서. 이는 플러그인 순서에 대한 더 세밀한 제어를 가능하게 하며, 고급 사용자만 사용해야 합니다. 낮은 숫자가 먼저 실행되며, 사용자 플러그인은 기본적으로 0 입니다. order 를 -20 에서 20 사이의 숫자로 설정하는 것이 권장됩니다. -20 은 Nuxt 플러그인 이전에 실행되는 pre -플러그인, 20 은 Nuxt 플러그인 이후에 실행되는 post -플러그인입니다. |
동적 플러그인 생성을 위해 getContents
사용을 선호하세요. 필요하지 않다면 order
설정을 피하세요.
options
: 다음 속성을 가진 선택적 객체:
속성 | 타입 | 필수 | 설명 |
---|---|---|---|
append | boolean | false | true 로 설정하면, 플러그인이 플러그인 배열에 추가됩니다. false 로 설정하면, 앞에 추가됩니다. 기본값은 false 입니다. |
예제
다양한 옵션으로 플러그인 템플릿 생성
빌드 시 동적으로 플러그인 코드를 생성해야 할 때 addPluginTemplate
을 사용하세요. 이는 전달된 옵션에 따라 다른 플러그인 내용을 생성할 수 있게 합니다. 예를 들어, Nuxt는 내부적으로 이 함수를 사용하여 Vue 앱 구성을 생성합니다.
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
export default defineNuxtConfig({
vue: {
config: {
idPrefix: 'nuxt',
},
},
})
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,
},
})
},
})
compatibilityVersion
을 4
로 설정하면, Nuxt는 더 이상 기본적으로 lodash.template
을 사용하여 템플릿을 컴파일하지 않습니다. experimental.compileTemplate
옵션을 통해 여전히 활성화할 수 있지만, 다음 주요 버전에서는 EJS 템플릿에 대한 지원이 완전히 제거될 것입니다.
※이 페이지는 Nuxt.js 공식 문서의 비공식 번역 페이지입니다.
공식 문서의 해당 페이지는 여기 있습니다:
https://nuxt.com/docs/3.x/api/kit/plugins