外掛

原始檔
Nuxt Kit 提供了一套實用工具,幫助您建立和使用外掛。您可以使用這些函式將外掛或外掛模板新增到您的模組中。

外掛是自包含的程式碼,通常向 Vue 新增應用層功能。在 Nuxt 中,外掛會自動從 app/plugins/ 目錄匯入。但是,如果您需要隨模組一起釋出外掛,Nuxt Kit 提供了 addPluginaddPluginTemplate 方法。這些實用工具允許您自定義外掛配置以更好地滿足您的需求。

addPlugin

註冊一個 Nuxt 外掛並將其新增到外掛陣列中。

觀看 Vue School 關於 addPlugin 的影片。

使用

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外掛檔案的路徑。
模式'all' | 'server' | 'client'false如果設定為 'all',外掛將包含在客戶端和伺服器包中。如果設定為 'server',外掛將僅包含在伺服器包中。如果設定為 'client',外掛將僅包含在客戶端包中。在指定 src 選項時,您還可以使用 .client.server 修飾符,以便僅在客戶端或伺服器端使用外掛。
ordernumberfalse外掛的順序。這允許更細粒度地控制外掛順序,並且只應由高階使用者使用。較低的數字優先執行,使用者外掛預設為 0。建議將 order 設定為 -20(對於 pre-plugins,即在 Nuxt 外掛之前執行的外掛)和 20(對於 post-plugins,即在 Nuxt 外掛之後執行的外掛)之間的數字。
除非必要,否則避免使用 order。如果您只需要在 Nuxt 預設設定之後註冊外掛,請使用 append

options:可選物件,具有以下屬性

屬性型別必需描述
appendbooleanfalse如果為 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 外掛。這對於需要在構建時生成程式碼的外掛非常有用。

觀看 Vue School 關於 addPluginTemplate 的影片。

使用

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 選項生成。
模式'all' | 'server' | 'client'false如果設定為 'all',外掛將包含在客戶端和伺服器包中。如果設定為 'server',外掛將僅包含在伺服器包中。如果設定為 'client',外掛將僅包含在客戶端包中。在指定 src 選項時,您還可以使用 .client.server 修飾符,以便僅在客戶端或伺服器端使用外掛。
optionsRecord<string, any>false要傳遞給模板的選項。
getContents(data: Record<string, any>) => string | Promise<string>false一個將使用 options 物件呼叫的函式。它應該返回一個字串或解析為字串的 Promise。如果提供了 src,此函式將被忽略。
writebooleanfalse如果設定為 true,模板將寫入目標檔案。否則,模板將僅在虛擬檔案系統中使用。
ordernumberfalse外掛的順序。這允許更細粒度地控制外掛順序,並且只應由高階使用者使用。較低的數字優先執行,使用者外掛預設為 0。建議將 order 設定為 -20(對於 pre-plugins,即在 Nuxt 外掛之前執行的外掛)和 20(對於 post-plugins,即在 Nuxt 外掛之後執行的外掛)之間的數字。
建議使用 getContents 進行動態外掛生成。除非必要,否則避免設定 order

options:可選物件,具有以下屬性

屬性型別必需描述
appendbooleanfalse如果為 true,外掛將附加到外掛陣列。如果為 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')
    }
  }
})`,
      })
    }
  },
})

這根據提供的配置生成不同的外掛程式碼。

export default defineNuxtConfig({
  vue: {
    config: {
      idPrefix: 'nuxt',
    },
  },
})