nuxt logo

Traducción de Documentación (No Oficial)

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:

PropiedadTipoRequeridoDescripción
srcstringtrueRuta al archivo del plugin.
mode'all' | 'server' | 'client'falseSi 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.
ordernumberfalseOrden 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:

PropiedadTipoRequeridoDescripción
appendbooleanfalseSi 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:

PropiedadTipoRequeridoDescripción
srcstringfalseRuta a la plantilla. Si no se proporciona src, se debe proporcionar getContents en su lugar.
filenamestringfalseNombre 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.
dststringfalseRuta 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'falseSi 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.
optionsRecord<string, any>falseOpciones para pasar a la plantilla.
getContents(data: Record<string, any>) => string | Promise<string>falseUna 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.
writebooleanfalseSi 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.
ordernumberfalseOrden 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:

PropiedadTipoRequeridoDescripción
appendbooleanfalseSi 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.

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')
    }
  }
})`,
      })
    }
  },
})

Esto genera diferentes códigos de plugin dependiendo de la configuración proporcionada.

::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"
  }
})

::

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.