Плагины
Плагины — автономный код, добавляющий функциональность на уровне приложения Vue. В Nuxt они автоматически подключаются из app/plugins/. Чтобы поставлять плагин вместе с модулем, в Nuxt Kit есть addPlugin и addPluginTemplate — с их помощью можно настроить плагин под свои задачи.
addPlugin
Регистрирует плагин Nuxt и добавляет его в массив плагинов.
Использование
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 | да | Путь к файлу плагина. |
mode | 'all' | 'server' | 'client' | нет | 'all' — в клиентский и серверный бандлы; 'server' — только сервер; 'client' — только клиент. Можно также использовать суффиксы .client и .server в имени файла в src. |
order | number | нет | Порядок выполнения. Меньшее число — раньше. Плагины пользователя по умолчанию 0. Рекомендуется от -20 (pre, до плагинов Nuxt) до 20 (post, после). |
order без необходимости. Для добавления после плагинов Nuxt используйте append.options: опциональный объект:
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
append | boolean | нет | 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',
})
},
})
export default defineNuxtPlugin((nuxtApp) => {
const colorMode = useColorMode()
nuxtApp.hook('app:mounted', () => {
if (colorMode.preference !== 'dark') {
colorMode.preference = 'dark'
}
})
})
addPluginTemplate
Добавляет шаблон и регистрирует его как плагин Nuxt. Удобно для плагинов, генерирующих код при сборке.
Использование
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 | нет | Путь к шаблону. Если не задан, нужно указать getContents. |
filename | string | нет | Имя файла шаблона. Если не задано, берётся из src (тогда src обязателен). |
dst | string | нет | Путь к целевому файлу. По умолчанию — из filename и buildDir Nuxt. |
mode | 'all' | 'server' | 'client' | нет | Как и у addPlugin: в какие бандлы включать плагин. |
options | Record<string, any> | нет | Данные, передаваемые в шаблон. |
getContents | (data: Record<string, any>) => string | Promise<string> | нет | Функция, вызываемая с объектом options; возвращает строку или промис. При заданном src не используется. |
write | boolean | нет | true — записать результат в файл; иначе только в виртуальную ФС. |
order | number | нет | Порядок плагина (как у addPlugin). |
getContents для динамической генерации. Не задавайте order без необходимости.options: опциональный объект (как у addPlugin):
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
append | boolean | нет | 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')
}
}
})`,
})
}
},
})
Итоговый код плагина зависит от переданной конфигурации.
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'
},
})