Configuration
Par défaut, Nuxt est configuré pour couvrir la plupart des cas d'usage. Cette configuration par défaut peut être écrasée par un fichier nuxt.config.js.
La propriété css
Nuxt nous permet de définir globalement les fichiers/modules/librairies CSS que nous voulons (ceux qui seront inclus dans chaque page).
SASS, il faut vérifier que nous avons bien installé les paquets node-sass et sass-loader.Dans notre fichier nuxt.config.js, il faut ajouter les ressources CSS:
export default {
css: [
// charge un module Node.js directement (ici c'est un fichier SASS)
'bulma',
// fichier CSS dans notre projet
'~/assets/css/main.css',
// fichier SCSS dans notre projet
'~/assets/css/main.scss'
]
}
Extensions de Style
Nous pouvons omettre l'extension de nos fichiers CSS/SCSS/Postcss/Less/Stylus/... listés dans notre tableau css.
export default {
css: ['~/assets/css/main', '~/assets/css/animations']
}
main.scss et main.css et si nous ne spécifions par l'extension dans notre tableau css par ex css: ['~/assets/css/main'] alors seulement un fichier sera chargé en fonction de l'ordre défini par styleExtensions. Dans ce cas, le fichier css sera chargé et le scss sera ignoré parce que l'extension css arrive en premier dans le tableau styleExtension.Ordre par défaut: ['css', 'pcss', 'postcss', 'styl', 'stylus', 'scss', 'sass', 'less']
Pré-processeurs
Grâce au loader Vue , nous pouvons utiliser n'importe quel type de pré-processeur pour notre <template> ou <style>, il faut utiliser l'attribut lang pour cela.
Voici l'exemple d'un fichier pages/index.vue utilisant du pug et du SASS :
<template lang="pug">
h1.red Salut {{ name }} !
</template>
<style lang="scss">
.red {
color: red;
}
</style>
Pour utiliser ces pré-processeurs, nous avons besoin d'installer leurs loaders Webpack:
yarn add --dev pug pug-plain-loader
yarn add --dev sass sass-loader@10
npm install --save-dev pug pug-plain-loader
npm install --save-dev sass sass-loader@10
JSX
Nuxt utilise @nuxt/babel-preset-app , qui est basé sur l'officiel @vue/babel-preset-app pour une configuration de Babel par défaut, afin que nous puissions utiliser du JSX dans nos composants.
Nous pouvons aussi utiliser du JSX dans la méthode render des composants:
export default {
data () {
return { name: 'Le monde' }
},
render (h) {
return <h1 class="red">{this.name}</h1>
}
}
Abréger createElement par h est une convention commune que nous pouvons voir dans l'écosystème Vue mais c'est en fait optionnel pour du JSX car ce dernier injecte automatiquement const h = this.$createElement dans n'importe quelle méthode et getter (pas les fonctions ni les fonctions fléchées) à condition qu'ils soient définis dans la syntaxe ES2015. Si c'est le cas, nous pouvons omettre le paramètre h dans le cas où nous utilisons du JSX.
Nous pouvons en apprendre davantage sur le fonction du JSX dans cette section de la documentation de Vue.
Ignorer des fichiers
.nuxtignore
Nous pouvons utiliser un fichier .nuxtignore pour dire à Nuxt d'ignorer des layout, page, store et/ou middleware à la racine de notre projet (rootDir) durant la phase de build. Le fichier .nuxtignore est sujet aux mêmes spécifications qu'un .gitignore ou un .eslintignore, dans le sens où chaque ligne est un schéma (glob pattern) indiquant quels fichiers devraient être ignorés.
# ignore le layout foo.vue
layouts/foo.vue
# ignore les fichiers layout dont le nom finit par -ignore.vue
layouts/*-ignore.vue
# ignore la page bar.vue
pages/bar.vue
# ignore les pages à l'intérieur du répertoire ignore
pages/ignore/*.vue
# ignore le store baz.js
store/baz.js
# ignore les fichiers du store qui correspondent avec _.test._
store/ignore/_.test._
# ignore les fichiers middleware à l'intérieur du répertoire foo sauf foo/bar.js
middleware/foo/*.js !middleware/foo/bar.js
La propriété ignorePrefix
N'importe quel fichier dans pages/, layout/, middleware/ ou store/ sera ignoré durant le build si son nom de fichier commence par le préfixe spécifié par ignorePrefix.
Par défaut, tous les fichiers qui commencent par un - seront ignorés, tels que store/-foo.js et pages/-bar.vue. Cela permet de laisser cohabiter des tests, des utilitaires et des composants avec les appelants sans pour autant les convertir en des routes, des stores etc.
La propriété ignore
Plus configurable que ignorePrefix: tous les fichiers qui correspondent au schéma (glob pattern) seront ignorés durant le build.
export default {
ignore: 'pages/bar.vue'
}
ignoreOptions
Derrière .nuxtignore se cache node-ignore, ainsi ignoreOptions peut être configuré avec les mêmes options que node-ignore.
export default {
ignoreOptions: {
ignorecase: false
}
}
Personnaliser la configuration Webpack
Nous pouvons personnaliser la configuration webpack de Nuxt via l'option extend dans notre fichier nuxt.config.js, cette option est une méthode qui accepte deux arguments. Le premier argument est l'objet config de webpack exporté depuis la configuration webpack de Nuxt. Le second paramètre est un objet context contenant les propriétés booléennes suivantes: { isDev, isClient, isServer, loaders }.
export default {
build: {
extend(config, { isDev, isClient }) {
// ...
config.module.rules.push({
test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9=&.]+)?$/,
loader: 'file-loader'
})
if (isDev) {
// asse Webpack en mode développement si `isDev` est vrai.
config.mode = 'development'
}
}
}
}
La méthode extend est appelée deux fois, une fois pour le bundle du client et une fois pour celui du serveur.
Personnaliser la configuration des fragments
Nous souhaiterions peut-être customiser un peu la configuration d'optimisation , en évitant de ré-écrire l'objet par défaut.
export default {
build: {
extend(config, { isClient }) {
if (isClient) {
config.optimization.splitChunks.maxSize = 200000
}
}
}
}
Exécuter ESLint à chaque build de webpack dans un environnement de développement
Pour être au courant d'erreurs de style de code, nous pourrions avoir envie d'exécuter ESLint à chaque build dans un environnement de développement.
export default {
build: {
extend(config, { isDev, isClient }) {
if (isDev && isClient) {
config.module.rules.push({
enforce: 'pre',
test: /\.(js|vue)$/,
loader: 'eslint-loader',
exclude: /(node_modules)/
})
}
}
}
}
Éditer l'hôte et le port
Par défaut, l'environnement de développement du hôte de Nuxt est localhost, qui n'est accessible qu'au sein de la machine hôte. Afin d'admirer notre application sur un autre appareil nous aurons besoin de modifier l'hôte.
Le hôte '0.0.0.0' a pour but de dire à Nuxt de résoudre une adresse hôte, afin de lui permettre d'être accessible à d'autres appareils en dehors de la machine hôte (ex: LAN). Si le hôte est défini sur la chaîne de caractère '0' (pas 0, qui lui est falsy) ou bien '0.0.0.0', notre adresse IP locale sera assignée à notre application Nuxt.
export default {
server: {
host: '0' // par défaut: localhost
}
}
Nous pouvons aussi changer le port par défaut.
export default {
server: {
port: 8000 // par défaut: 3000
}
}
'0' (pas 0, qui lui est falsy), un port aléatoire sera assigné à notre application Nuxt.Même si nous pouvons modifier cela dans le fichier nuxt.config.js, ce n'est pas conseillé car cela peut causer des soucis lors de l'hébergement de notre site. Il sera plutôt conseillé de modifier l'hôte et le port directement dans notre commande dev.
HOST=0 PORT=8000 npm run dev
ou créer un script dans notre package.json
"scripts": {
"dev:host": "nuxt --hostname '0' --port 8000"
}
Configuration Asynchrone
Même s'il est conseillé d'utiliser la configuration normale export default {}, nous pouvons utiliser une configuration asynchrone en exportant une fonction asynchrone qui retourne l'objet de configuration.
import axios from 'axios'
export default async () => {
const data = await axios.get('https://api.nuxtjs.dev/posts')
return {
head: {
title: data.title
//... le reste de la configuration
}
}
}
@nuxtjs/axios ne peut pas être utilisé dans le fichier nuxt.config.js. Nous aurons besoin d'importer axios et de le configurer à nouveau.Configuration avancée
nuxt.config.js a bien plus d'option de customisation et de configuration ! Se référer aux clés présentes dans le glossaire de configuration .
Sébastien Chopin
Nazaré da Piedade
Nobu
川音리오
Maciek Palmowski
Nestor Vera
Daniel Roe
Yue Yang
Jeronimas
Clément Ollivier
Alexander Lichter
N3-rd
Adrien Zaganelli
Mag
Stefan Huber
Olga Bulat
Paiva
Florian Reuschel
Savas Vedova
HIJACK
Vinícius Alves
Kareem Dabbeet
Valentín Costa
Ryan Skinner
Alex Hirzel
Ajeet Chaulagain
René Eschke
Nico Devs
Muhammad
Naoki Hamada
Tom
Yann Aufray
Anthony Chu
Nuzhat Minhaz
Lucas Portet
Richard Schloss
Bobby
bpy
Antony Konstantinidis
Hibariya
Jose Seabra
Eze
Florian Lefebvre
Lucas Recoaro
Julien SEIXAS