Plugins
Nuxt Kit proporciona un conjunto de utilidades para ayudarte a crear y usar plugins. Puedes añadir plugins o plantillas de plugins a tu módulo utilizando estas funciones.
Los plugins son código autónomo que generalmente añaden funcionalidad a nivel de aplicación a Vue. En Nuxt, los plugins se importan automáticamente desde el directorio plugins/
. Sin embargo, si necesitas enviar un plugin con tu módulo, Nuxt Kit proporciona los métodos addPlugin
y addPluginTemplate
. Estas utilidades te permiten personalizar la configuración del plugin para adaptarse mejor a tus necesidades.
addPlugin
Registra un plugin de Nuxt y lo añade al array de plugins.
Mira el video de Vue School sobre addPlugin
.
Uso
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',
})
},
})
Tipo
function addPlugin(plugin: NuxtPlugin | string, options?: AddPluginOptions): NuxtPlugin
Parámetros
plugin
: Un objeto plugin o una cadena con la ruta al plugin. Si se proporciona una cadena, se convertirá en un objeto plugin con src
establecido en el valor de la cadena.
Si se proporciona un objeto plugin, debe tener las siguientes propiedades:
Propiedad | Tipo | Requerido | Descripción |
---|---|---|---|
src | string | true | Ruta al archivo del plugin. |
mode | 'all' | 'server' | 'client' | false | Si se establece en 'all' , el plugin se incluirá en ambos paquetes, cliente y servidor. Si se establece en 'server' , el plugin solo se incluirá en el paquete del servidor. Si se establece en 'client' , el plugin solo se incluirá en el paquete del cliente. También puedes usar los modificadores .client y .server al especificar la opción src para usar el plugin solo en el lado del cliente o del servidor. |
order | number | false | Orden del plugin. Esto permite un control más granular sobre el orden de los plugins y solo debe ser usado por usuarios avanzados. Los números más bajos se ejecutan primero, y los plugins de usuario tienen un valor predeterminado de 0 . Se recomienda establecer order en un número entre -20 para pre -plugins (plugins que se ejecutan antes de los plugins de Nuxt) y 20 para post -plugins (plugins que se ejecutan después de los plugins de Nuxt). |
Evita usar order
a menos que sea necesario. Usa append
si simplemente necesitas registrar plugins después de los predeterminados de Nuxt.
options
: Objeto opcional con las siguientes propiedades:
Propiedad | Tipo | Requerido | Descripción |
---|---|---|---|
append | boolean | false | Si es true , el plugin se añadirá al final del array de plugins. Si es false , se añadirá al principio. Por defecto es false . |
Ejemplos
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
Añade una plantilla y la registra como un plugin de nuxt. Esto es útil para plugins que necesitan generar código en tiempo de compilación.
Mira el video de Vue School sobre addPluginTemplate
.
Uso
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")' : ''}
}
})`,
})
},
})
Tipo
function addPluginTemplate(pluginOptions: NuxtPluginTemplate, options?: AddPluginOptions): NuxtPlugin
Parámetros
pluginOptions
: Un objeto plantilla de plugin con las siguientes propiedades:
Propiedad | Tipo | Requerido | Descripción |
---|---|---|---|
src | string | false | Ruta a la plantilla. Si no se proporciona src , se debe proporcionar getContents en su lugar. |
filename | string | false | Nombre del archivo de la plantilla. Si no se proporciona filename , se generará a partir de la ruta src . En este caso, la opción src es requerida. |
dst | string | false | Ruta al archivo de destino. Si no se proporciona dst , se generará a partir de la ruta filename y la opción buildDir de nuxt. |
mode | 'all' | 'server' | 'client' | false | Si se establece en 'all' , el plugin se incluirá en ambos paquetes, cliente y servidor. Si se establece en 'server' , el plugin solo se incluirá en el paquete del servidor. Si se establece en 'client' , el plugin solo se incluirá en el paquete del cliente. También puedes usar los modificadores .client y .server al especificar la opción src para usar el plugin solo en el lado del cliente o del servidor. |
options | Record<string, any> | false | Opciones para pasar a la plantilla. |
getContents | (data: Record<string, any>) => string | Promise<string> | false | Una función que se llamará con el objeto options . Debe devolver una cadena o una promesa que se resuelva en una cadena. Si se proporciona src , esta función será ignorada. |
write | boolean | false | Si se establece en true , la plantilla se escribirá en el archivo de destino. De lo contrario, la plantilla se usará solo en el sistema de archivos virtual. |
order | number | false | Orden del plugin. Esto permite un control más granular sobre el orden de los plugins y solo debe ser usado por usuarios avanzados. Los números más bajos se ejecutan primero, y los plugins de usuario tienen un valor predeterminado de 0 . Se recomienda establecer order en un número entre -20 para pre -plugins (plugins que se ejecutan antes de los plugins de Nuxt) y 20 para post -plugins (plugins que se ejecutan después de los plugins de Nuxt). |
Prefiere usar getContents
para la generación dinámica de plugins. Evita establecer order
a menos que sea necesario.
options
: Objeto opcional con las siguientes propiedades:
Propiedad | Tipo | Requerido | Descripción |
---|---|---|---|
append | boolean | false | Si es true , el plugin se añadirá al final del array de plugins. Si es false , se añadirá al principio. Por defecto es false . |
Ejemplos
Generar una plantilla de plugin con diferentes opciones
Usa addPluginTemplate
cuando necesites generar código de plugin dinámicamente en tiempo de compilación. Esto te permite generar diferentes contenidos de plugin basados en las opciones que se le pasen. Por ejemplo, Nuxt utiliza internamente esta función para generar configuraciones de aplicaciones 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')
}
}
})`,
})
}
},
})
Esto genera diferentes códigos de plugin dependiendo de la configuración proporcionada.
::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"
}
})
::
Usar una plantilla EJS para generar un plugin
También puedes usar una plantilla EJS para generar tu plugin. Las opciones pueden pasarse a través de la propiedad options
y luego usarse dentro de la plantilla EJS para generar el contenido del plugin.
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,
},
})
},
})
Si estableces compatibilityVersion
a 4
, Nuxt ya no usa lodash.template
para compilar plantillas por defecto. Aún puedes habilitarlo a través de la opción experimental.compileTemplate
, pero el soporte para plantillas EJS se eliminará por completo en la próxima versión principal.
※Esta página es una traducción no oficial de la documentación oficial de Nuxt.js.
La página correspondiente en la documentación oficial está aquí:
https://nuxt.com/docs/3.x/api/kit/plugins