|
| 1 | +--- |
| 2 | +title: Assets |
| 3 | +description: Nuxt utilise vue-loader, file-loader et url-loader avec Webpack par défaut pour un servir les fichiers statiques, mais vous pouvez également utiliser le répertoire "Static" pour les fichiers statiques. |
| 4 | +--- |
| 5 | + |
| 6 | +> Nuxt utilise vue-loader, file-loader et url-loader avec Webpack par défaut pour un servir les fichiers statiques, mais vous pouvez également utiliser le répertoire "Static" pour les fichiers statiques. |
| 7 | +
|
| 8 | +## Avec Webpack |
| 9 | + |
| 10 | +Par défaut, [vue-loader](http://vue-loader.vuejs.org/en/) traite automatiquement vos fichiers de style et vos templates à l'aide de `css-loader` et du compilatuer de template de Vue. Dans ce processus de compilation, toutes les URLs des fichiers comme `<img src="...">`, `background: url(...)` et le CSS `@import` sont résolues en tant que dépendances des modules. |
| 11 | + |
| 12 | +Par exemple, avec cette arborescence: |
| 13 | + |
| 14 | +```bash |
| 15 | +-| assets/ |
| 16 | +----| image.png |
| 17 | +-| pages/ |
| 18 | +----| index.vue |
| 19 | +``` |
| 20 | + |
| 21 | +Dans notre CSS, si nous utilisons `url('~assets/image.png')`, ce sera transformé en `require('~assets/image.png')`. |
| 22 | + |
| 23 | +Ou si dans `pages/index.vue` nous utilisons: |
| 24 | +```html |
| 25 | +<template> |
| 26 | + <img src="~assets/image.png"> |
| 27 | +</template> |
| 28 | +``` |
| 29 | + |
| 30 | +Ce sera compilé en: |
| 31 | + |
| 32 | +```js |
| 33 | +createElement('img', { attrs: { src: require('~assets/image.png') }}) |
| 34 | +``` |
| 35 | + |
| 36 | +Puisque que les fichiers `.png` ne sont pas des fichiers JavaScript, nuxt.js configure Webpack afin d'utiliser [file-loader](https://github.com/webpack/file-loader) et [url-loader](https://github.com/webpack/url-loader) afin de pouvoir s'en charger. |
| 37 | + |
| 38 | +Leurs avantages sont: |
| 39 | +- `file-loader` vous laisse définir ou copier les assets, comment les nommer et vous permets d'utiliser des hash de version pour un meilleur cache. |
| 40 | +- `url-loader` vous permet d'insérer de façon conditionnelle un fichier en tant qu'URL encodée en base 64 si sa taille est inférieure à un seuil donné. Cela peut réduire un certain nombre de demandes HTTP pour les fichiers triviaux. Si la taille du fichier est supérieur au seuil, il retombe automatiquement sur `file-loader`. |
| 41 | + |
| 42 | +Actuellement, la configuration des loaders par défaut de Nuxt.js est la suivante: |
| 43 | + |
| 44 | +```js |
| 45 | +[ |
| 46 | + { |
| 47 | + test: /\.(png|jpe?g|gif|svg)$/, |
| 48 | + loader: 'url-loader', |
| 49 | + query: { |
| 50 | + limit: 1000, // 1KO |
| 51 | + name: 'img/[name].[hash:7].[ext]' |
| 52 | + } |
| 53 | + }, |
| 54 | + { |
| 55 | + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, |
| 56 | + loader: 'url-loader', |
| 57 | + query: { |
| 58 | + limit: 1000, // 1KO |
| 59 | + name: 'fonts/[name].[hash:7].[ext]' |
| 60 | + } |
| 61 | + } |
| 62 | +] |
| 63 | +``` |
| 64 | + |
| 65 | +Ce qui signifie que tous les fichiers inférieurs à 1KO seront intégrés comme URL base-64. Sinon, l'image/police sera copiée dans son dossier correspondant (dans le répertoire `.nuxt`) avec un nom contenant des hach de version pour une meilleure mise en cache. |
| 66 | + |
| 67 | +Lors du lancement de notre application avec `nuxt`, notre modèle dans` pages/index.vue`: |
| 68 | + |
| 69 | +```html |
| 70 | +<template> |
| 71 | + <img src="~assets/image.png"> |
| 72 | +</template> |
| 73 | +``` |
| 74 | + |
| 75 | +Sera transformé en: |
| 76 | +```html |
| 77 | +<img src="/_nuxt/img/image.0c61159.png"> |
| 78 | +``` |
| 79 | + |
| 80 | +Si vous désirez modifier ou désactiver ces loaders, regarder la [documentation sur les loaders](/api/configuration-build#loaders). |
| 81 | + |
| 82 | +## Static |
| 83 | + |
| 84 | +Si vous ne souhaitez pas utiliser les assets à l'aide de Webpack à partir du répertoire `assets`, vous pouvez créer et utiliser le répertoire` static` dans le répertoire racine du projet. |
| 85 | + |
| 86 | +Ces fichiers seront automatiquement servis par Nuxt et accessibles via l'URL racine du projet. |
| 87 | + |
| 88 | +Cette option est utile pour les fichiers tels que `robots.txt`,` sitemap.xml` ou `CNAME` (pour GitHub Pages et autres). |
| 89 | + |
| 90 | +À partir de votre code, vous pouvez ensuite référencer ces fichiers avec de URLs commencant par `/`: |
| 91 | + |
| 92 | +```html |
| 93 | +<!-- Static image from static directory --> |
| 94 | +<img src="/my-image.png"/> |
| 95 | + |
| 96 | +<!-- Webpacked image from assets directory --> |
| 97 | +<img src="/assets/my-image-2.png"/> |
| 98 | +``` |
0 commit comments