プラグイン
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 の間の数値に設定することをお勧めします。pre -プラグイン(Nuxt プラグインの前に実行されるプラグイン)には -20 、post -プラグイン(Nuxt プラグインの後に実行されるプラグイン)には 20 を設定します。 |
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 の間の数値に設定することをお勧めします。pre -プラグイン(Nuxt プラグインの前に実行されるプラグイン)には -20 、post -プラグイン(Nuxt プラグインの後に実行されるプラグイン)には 20 を設定します。 |
動的なプラグイン生成には 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 テンプレートのサポートは完全に削除されます。