プラグインディレクトリ
plugins ディレクトリにはルート Vue.js アプリケーションがインスタンス化する前に実行する Javascript プラグインが含まれています。
これは Vue プラグインを追加し、関数や定数を導入する場所です。Vue.use() を使用する必要がある時は都度 plugins/ ファイルを作成し、nuxt.config.js の plugins にそのパスを追加する必要があります。
外部パッケージ
サーバーとクライアント両方に HTTP リクエストを行うためには、アプリケーションで外部パッケージ/モジュール(著名な例は axios です)を使用することをお勧めします。
はじめに、npm か Yarn を介してインストールします。
yarn add @nuxtjs/axios
 npm install @nuxtjs/axios
 例えば、アプリケーション全体の API 呼び出しから発生する可能性のあるエラーに対応するよう、axios インターセプターを設定できます。この例では、API から 500 ステータスエラーが発生した時、sorry というカスタムエラーページにユーザをリダイレクトします。
export default function ({ $axios, redirect }) {
  $axios.onError(error => {
    if (error.response.status === 500) {
      redirect('/sorry')
    }
  })
}
 最後になりますが、モジュールと新しく作成したプラグインをプロジェクト構成に追加します。
module.exports = {
  modules: ['@nuxtjs/axios'],
  plugins: ['~/plugins/axios.js']
}
 そのあとページコンポーネントで直接使用できます:
<template>
  <h1>{{ post.title }}</h1>
</template>
<script>
export default {
    async asyncData ({ $axios, params }) {
      const  post  = await $axios.$get(`https://api.nuxtjs.dev/posts/${params.id}`)
      return { post }
    }
}
</script>
 モジュールのインストールなしで axios を使うための他の方法は、<script> タグで直接 axios をインポートすることです。
<script>
import axios from 'axios'
export default {
    async asyncData ({ params }) {
      const { data: post }  = await axios.get(`https://api.nuxtjs.dev/posts/${params.id}`)
      return { post }
    }
}
</script>
 nuxt.config.js の build > transpile オプションにパッケージを追加する必要があります。build: {
  // ここでwebpack設定を拡張できます
  transpile: ['npm-package-name'],
},
 Vue プラグイン
v-tooltip などの Vue プラグインを使用してアプリケーションにツールチップを表示する場合、アプリを起動する前にプラグインを設定する必要があります。
はじめにインストールをする必要があります
yarn add v-tooltip
 npm install v-tooltip
 次にファイル plugins/vue-tooltip.js を作成します
import Vue from 'vue'
import VTooltip from 'v-tooltip'
Vue.use(VTooltip)
 plugins プロパティ
次に nuxt.config.js の plugins キー内にファイルパスを追加します。plugins プロパティを使用すると、簡単に Vue.js プラグインをメインアプリケーションに追加できます。plugins プロパティで定義されているすべてのパスは、メインアプリケーションを初期化する前にインポートされます。
export default {
  plugins: ['~/plugins/vue-tooltip.js']
}
 ES6 プラグイン
プラグインが node_modules にあり、ES6 モジュールをエクスポートする場合、transpile ビルドオプションに追加する必要がある場合があります:
module.exports = {
  build: {
    transpile: ['vue-tooltip']
  }
}
 その他のビルドオプションについては、configuration build のドキュメントを参照してください。
クライアントまたはサーバーサイドのみ
一部のプラグインは SSR がサポートされていないため、ブラウザのみで機能する場合があります。
従来のプラグインに名前を付ける
プラグインがクライアント、もしくはサーバーサイドのみで実行されると想定される場合、.client.js または .server.js は、プラグインファイルの拡張子として適用できます。ファイルはそれぞれの(クライアントまたはサーバー)サイドのみに自動的に含まれます。
export default {
  plugins: [
    '~/plugins/foo.client.js', // クライアントサイドのみ
    '~/plugins/bar.server.js', // サーバーサイドのみ
    '~/plugins/baz.js' // クライアントサイドとサーバーサイド両方
  ]
}
 オブジェクト構文
plugins の mode プロパティ('client' または 'server')でオブジェクト構文を使用することもできます。
export default {
  plugins: [
    { src: '~/plugins/both-sides.js' },
    { src: '~/plugins/client-only.js', mode: 'client' }, // クライアントサイドのみ
    { src: '~/plugins/server-only.js', mode: 'server' } // サーバーサイドのみ
  ]
}
 $root とコンテキストの挿入 
ときどき、アプリケーション内で関数や値を利用できるようにしたい場合があります。これらの変数を Vue インスタンス(クライアントサイド)、コンテキスト(サーバーサイド)、さらには Vuex ストアに挿入できます。これらの関数の前に $ を付けるのが慣例です。
Nuxt はこれを簡単に行うための inject(key、value メソッドを提供します。関数をエクスポートするとき、2 番目のパラメーターとして Inject が指定されます。$ は、キーの先頭に自動的に追加されます。
beforeCreate フックと created フックのみがクライアント、サーバーサイド両方から呼び出されることを把握しておくことが重要です。他のすべてのフックはクライアントサイドからのみ呼び出されます。export default ({ app }, inject) => {
  // Vue、コンテキスト、そしてストアに $hello(msg)を挿入します。
  inject('hello', msg => console.log(`Hello ${msg}!`))
}
 export default {
  plugins: ['~/plugins/hello.js']
}
 $hello サービスは、ページ、コンポーネント、プラグイン、ストアアクションの context と this にアクセスできるようになりました。
export default {
  mounted() {
    this.$hello('mounted')
    // console.log 'Hello mounted!' が呼び出される
  },
  asyncData({ app, $hello }) {
    $hello('asyncData')
    // Nuxt <= 2.12 を使用する場合は 👇
    app.$hello('asyncData')
  }
}
 export const state = () => ({
  someValue: ''
})
export const actions = {
  setSomeValueToWhatever({ commit }) {
    this.$hello('store action')
    const newValue = 'whatever'
    commit('changeSomeValue', newValue)
  }
}
 Vue.use()、Vue.component() を使用しないでください、またグローバルに、Nuxt インジェクション専用のこの関数内に Vue を接続しないでください。サーバーサイドでメモリリークが発生します。extendPlugins プロパティ
プラグインを拡張したり、Nuxt によって作成されたプラグインの順序を変更したりすることができます。この関数は plugin オブジェクトの配列を受け入れ、プラグインオブジェクトの配列を返す必要があります。
プラグインの順序を変更する例:
export default {
  extendPlugins(plugins) {
    const pluginIndex = plugins.findIndex(
      ({ src }) => src === '~/plugins/shouldBeFirst.js'
    )
    const shouldBeFirstPlugin = plugins[pluginIndex]
    plugins.splice(pluginIndex, 1)
    plugins.unshift(shouldBeFirstPlugin)
    return plugins
  }
}
 グローバルミックスイン
グローバルミックスインは Nuxt プラグインで簡単に追加できますが、正しく処理しないとトラブルやメモリリークが発生する可能性があります。アプリケーションにグローバルミックスインを追加するときは、常にフラグを使用して複数回登録しないようにする必要があります:
import Vue from "vue"
// 他の mixin と衝突しないように
// フラグの名前は必ずユニークなものにしてください。
if (!Vue.__my_mixin__) {
  Vue.__my_mixin__ = true
  Vue.mixin({ ... }) // ミックスインを設定する
}
 
 
        Leoš Literák
       
 
        Trizotti
       
 
        Clément Ollivier
       
 
        Sébastien Chopin
       
 
        Marcello Bachechi
       
 
        Rodolphe
       
 
        Thomas Underwood
       
 
        Shek Evgeniy
       
 
        felipesuri
       
 
        Lukasz Formela
       
 
        Hugo Torzuoli
       
 
        Sylvain Marroufin
       
 
        Kareem Dabbeet
       
 
        tramplay
       
 
        Daniel Roe
       
 
        verebelyicsaba
       
 
        Adam
       
 
        Nate Butler
       
 
        Sandra Rodgers
       
 
        Arpit Patidar
       
 
        Matthew Kuehn
       
 
        Steven DUBOIS
       
 
        Travis Lindsey
       
 
        syagawa
       
 
        Maxime
       
 
        かる
       
 
        Al Power
       
 
        Florent Delerue
       
 
        quanghm
       
 
        José Manuel Casani Guerra
       
 
        Unai Mengual
       
 
        kazuya kawaguchi
       
 
        Michael Lynch
       
 
        Tomachi
       
 
        pooya parsa
       
 
        Meir Roth
       
 
        Brett
       
 
        Adam Miedema
       
 
        Thomas Bnt
       
 
        Kazuki Furukawa
       
 
        Anthony Ruelle
       
 
        Christophe Carvalho Vilas-Boas
       
 
        Roman Harmyder