|
| 1 | +--- |
| 2 | +title: Plugins |
| 3 | +description: Nuxt.js vous permet de définir les plugins js à exécuter avant d'instancier l'application vue.js racine, il peut s'agir d'utiliser votre propre bibliothèque ou des modules externes. |
| 4 | +--- |
| 5 | + |
| 6 | +> Nuxt.js vous permet de définir les plugins js à exécuter avant d'instancier l'application vue.js racine, il peut s'agir d'utiliser votre propre bibliothèque ou des modules externes. |
| 7 | +
|
| 8 | +<div class="Alert">Il est important de savoir que, dans le [cycle de vie d'une instance de Vue](https://vuejs.org/v2/guide/instance.html#Lifecycle-Diagram), les *hooks* `beforeCreate` et` created` sont appelés **à la fois côté client et du côté serveur**. Tous les autres *hooks* ne sont appelés que du client.</div> |
| 9 | + |
| 10 | +## Modules externes |
| 11 | + |
| 12 | +Nous souhaitons utiliser des packages/modules externes dans notre application, un excellent exemple est [axios](https://github.com/mzabriskie/axios) pour les requêtes HTTP pour le serveur et le client. |
| 13 | + |
| 14 | +Nous l'installons via npm: |
| 15 | + |
| 16 | +```bash |
| 17 | +npm install --save axios |
| 18 | +``` |
| 19 | + |
| 20 | +Puis, nous pouvons l'utiliser directement dans nos pages: |
| 21 | + |
| 22 | +```html |
| 23 | +<template> |
| 24 | + <h1>{{ title }}</h1> |
| 25 | +</template> |
| 26 | + |
| 27 | +<script> |
| 28 | +import axios from 'axios' |
| 29 | +
|
| 30 | +export default { |
| 31 | + async data ({ params }) { |
| 32 | + let { data } = await axios.get(`https://my-api/posts/${params.id}`) |
| 33 | + return { title: data.title } |
| 34 | + } |
| 35 | +} |
| 36 | +</script> |
| 37 | +``` |
| 38 | + |
| 39 | +Mais il y a **un problème**, si nous importons axios dans une autre page, il sera à nouveau inclus dans le bundle de la page. Nous voulons inclure `axios` une seule fois dans notre application, pour cela, nous utilisons la clé `build.vendor` dans notre `nuxt.config.js`: |
| 40 | + |
| 41 | +```js |
| 42 | +module.exports = { |
| 43 | + build: { |
| 44 | + vendor: ['axios'] |
| 45 | + } |
| 46 | +} |
| 47 | +``` |
| 48 | + |
| 49 | +Ensuite, je peux importer `axios` partout sans avoir à m'inquiéter de l'importer plusieurs fois et de rendre le bundle plus lourd. |
| 50 | + |
| 51 | +## Plugins Vue |
| 52 | + |
| 53 | +Si nous voulons utiliser [vue-notifications](https://github.com/se-panfilov/vue-notifications) pour afficher des notifications dans notre application, nous devons configurer le plugin avant de lancer l'application. |
| 54 | + |
| 55 | +Dans `plugins/vue-notifications.js`: |
| 56 | +```js |
| 57 | +import Vue from 'vue' |
| 58 | +import VueNotifications from 'vue-notifications' |
| 59 | + |
| 60 | +Vue.use(VueNotifications) |
| 61 | +``` |
| 62 | + |
| 63 | +Puis, nous ajoutons le fichier dans l'attribut `plugins` de `nuxt.config.js`: |
| 64 | +```js |
| 65 | +module.exports = { |
| 66 | + plugins: ['~plugins/vue-notifications'] |
| 67 | +} |
| 68 | +``` |
| 69 | + |
| 70 | +Pour en savoir plus sur l'attribut `plugins`, voir [plugins api](/api/configuration-plugins). |
| 71 | + |
| 72 | +Acutellement, `vue-notifications` sera inclu dans le bundle de l'application; mais comme il s'agit d'une librairie, nous voulons l'inclure dans le bundle `vendor` pour une meilleure mise en cache. |
| 73 | + |
| 74 | +Nous pouvons mettre à jour `nuxt.config.js` pour ajouter `vue-notifications` dans le bundle `vendor`: |
| 75 | +```js |
| 76 | +module.exports = { |
| 77 | + build: { |
| 78 | + vendor: ['vue-notifications'] |
| 79 | + }, |
| 80 | + plugins: ['~plugins/vue-notifications'] |
| 81 | +} |
| 82 | +``` |
| 83 | + |
| 84 | +## Côté client uniquement |
| 85 | + |
| 86 | +Certains plugins fonctionnent **uniquement côté navigateur**. Vous pouvez utiliser l'option `ssr: false` dans `plugins` pour exécuter le fichier uniquement côté client. |
| 87 | + |
| 88 | +Exemple: |
| 89 | + |
| 90 | +`nuxt.config.js`: |
| 91 | +```js |
| 92 | +module.exports = { |
| 93 | + plugins: [ |
| 94 | + { src: '~plugins/vue-notifications', ssr: false } |
| 95 | + ] |
| 96 | +} |
| 97 | +``` |
| 98 | + |
| 99 | +`plugins/vue-notifications.js`: |
| 100 | +```js |
| 101 | +import Vue from 'vue' |
| 102 | +import VueNotifications from 'vue-notifications' |
| 103 | + |
| 104 | +Vue.use(VueNotifications) |
| 105 | +``` |
| 106 | + |
| 107 | +Dans le cas où vous devez importer certaines librairies uniquement pour le serveur, vous pouvez utiliser la variable `process.server` définie sur `true` lorsque le serveur web crée le fichier `server.bundle.js`. |
0 commit comments