Configuração
Por predefinição, a Nuxt está configurada para abranger a maioria dos casos de uso. Esta configuração predefinida pode ser sobrescrita pelo ficheiro nuxt.config.js.
A Propriedade css
A Nuxt permite-nos definir os ficheiros, módulos e bibliotecas que quisermos definir globalmente (incluídos em todas as páginas).
sass precisamos certificar-nos de que instalamos os pacotes sass e sass-loader.No nuxt.config.js, adicionamos os recursos de folha de estilo em cascata:
export default {
css: [
// Carregar um módulo de Node.js diretamente
// (neste exemplo é um ficheiro de Sass)
'bulma',
// ficheiro de CSS no projeto
'~/assets/css/main.css',
// ficheiro de SCSS no projeto
'~/assets/css/main.scss'
]
}
Extensões de Estilo
Podemos omitir a extensão do ficheiro para ficheiros CSS, SCSS, PostCSS, Less, Stylus e muitos mais listados no vetor css no nosso ficheiro de configuração da Nuxt:
export default {
css: ['~/assets/css/main', '~/assets/css/animations']
}
main.scss e main.css, e não especificarmos uma extensão na entrada do vetor css, por exemplo, css: ['~/assets/css/main'], então apenas um dos ficheiros será carregado, dependendo da ordem da styleExtensions. Neste caso apenas o ficheiro .css será carregado e o ficheiro .scss será ignorado porque o .css vem primeiro no vetor da styleExtensions por predefinição.Ordem predefinida: ['css', 'pcss', 'postcss', 'styl', 'stylus', 'scss', 'sass', 'less'].
Pré-processadores
Graças ao vue-loader , podemos usar qualquer tipo de pré-processador para o nosso <template> ou <style>: usamos o atributo lang.
Exemplo do nosso pages/index.vue usando Pug e Sass :
<template lang="pug">
h1.red Hello {{ name }}!
</template>
<style lang="scss">
.red {
color: red;
}
</style>
Para usar estes pré-processadores, precisamos os seus carregadores de 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
Recursos Externos
Definições Globais
Podemos incluir os nossos recursos externos no objeto ou função head. Tal como descrita na documentação da interface de programação de aplicação da head , os exemplos seguintes mostram a utilização de head como um objeto e como uma função. Se quisermos usar valores do nosso componente .vue como propriedades computadas ou dados, podemos usar a função head, retornando o objeto head final. Também podemos passar para cada recurso uma body: true opcional para incluir o recurso antes do marcador de fechamento </body>.
Incluímos os nossos recursos em nuxt.config.js (neste caso, no objeto head):
export default {
head: {
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
}
],
link: [
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto&display=swap'
}
]
}
}
Definições Locais
Incluímos os nossos recursos no nosso ficheiro .vue dentro do diretório pages/ (neste caso, na função head):
<template>
<h1>About page with jQuery and Roboto font</h1>
</template>
<script>
export default {
head() {
return {
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'
}
],
link: [
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto&display=swap'
}
]
}
}
}
</script>
<style scoped>
h1 {
font-family: Roboto, sans-serif;
}
</style>
Extensões de PostCSS
Se estiver presente, renomeamos ou eliminamos o postcss.config.js no nosso diretório de projeto. Depois, no nosso ficheiro nuxt.config.js, adicionamos o seguinte:
export default {
build: {
postcss: {
// Adicionar os nomes de extensões como chaves e argumentos como valores.
// Instalá-los antes como dependências com `npm` ou `yarn`.
plugins: {
// Desativar uma extensão passando `false` como valor.
'postcss-url': false,
'postcss-nested': {},
'postcss-responsive-type': {},
'postcss-hexrgba': {}
},
preset: {
// Alterar as definições de `postcss-preset-env`
autoprefixer: {
grid: true
}
}
}
}
}
JSX
A Nuxt usa @nuxt/babel-preset-app , o qual se baseia no @vue/babel-preset-app oficial para a configuração predefinida da Babel, para podermos usar a JSX nos nossos componentes.
Também podemos usar JSX no método render dos nossos componentes:
export default {
data () {
return { name: 'World' }
},
render (h) {
return <h1 class="red">{this.name}</h1>
}
}
O ato de apelidar createElement como h é uma convenção comum que veremos no ecossistema da Vue, mas, na verdade, é opcional para a JSX, uma vez que esta injeta automaticamente const h = this.$createElement em qualquer método e recuperador (não funções ou funções de seta) declarados na sintaxe da ES2015 que tem extensão de sintaxe de JavaScript, então podemos deixar de lado o parâmetro (h).
Podemos saber mais sobre como utilizá-la na secção da extensão de sintaxe de JavaScript (JSX) da documentação da Vue.js.
Ignorar Ficheiros
.nuxtignore
Podemos utilizar um ficheiro .nuxtignore para permitir que a Nuxt ignore os ficheiros de layout, page, store e middleware no diretório raiz do nosso projeto (rootDir) durante a fase de construção. O ficheiro .nuxtignore está sujeito à mesma especificação que os ficheiros .gitignore e .eslintignore, em que cada linha é um padrão de globo indicando quais os ficheiros que devem ser ignorados.
# ignorar a disposição foo.vue
layouts/foo.vue
# ignorar os ficheiros de disposição cujo nome termina com -ignore.vue
layouts/*-ignore.vue
# ignorar a página bar.vue
pages/bar.vue
# ignorar a página dentro da pasta ignore
pages/ignore/*.vue
# ignorar o armazém de estado baz.js
store/baz.js
# ignorar os ficheiros de armazém de estado correspondentes a _.test._
store/ignore/_.test._
# ignorar os ficheiros de intermediários na pasta foo exceto foo/bar.js
middleware/foo/*.js !middleware/foo/bar.js
A Propriedade ignorePrefix
Qualquer ficheiro em pages/, layout/, middleware/ ou store/ será ignorado durante a construção se o seu nome de ficheiro começar com o prefixo especificado por ignorePrefix.
Por predefinição, todos os ficheiros que comecem por - serão ignorados, tais como store/-foo.js e pages/-bar.vue. Isto permite a colocação de testes, utilitários e componentes com os seus chamadores sem serem convertidos em rotas, armazéns de estado, etc.
A Propriedade ignore
Mais personalizável do que ignorePrefix: todos os ficheiros que correspondem a padrões de globo especificados dentro de ignore serão ignorados na construção:
export default {
ignore: 'pages/bar.vue'
}
ignoreOptions
O nuxtignore utiliza node-ignore nos bastidores, a ignoreOptions pode ser configurada como options do node-ignore:
export default {
ignoreOptions: {
ignorecase: false
}
}
Estender a Configuração da Webpack
Podemos estender a configuração da Webpack da Nuxt através da opção extend no nosso nuxt.config.js. A opção extend da propriedade build é um método que aceita dois argumentos. O primeiro argumento é o objeto config da Webpack exportado da configuração da Webpack da Nuxt. O segundo parâmetro é um objeto de contexto com as seguintes propriedades booleanas: { 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'
})
// Definir o modo da Webpack para desenvolvimento se `isDev` for verdadeiro
if (isDev) {
config.mode = 'development'
}
}
}
}
O método extend é chamado duas vezes — uma para o pacote do cliente e outra para o pacote do servidor.
Personalizar a Configuração dos Pedaços
Podemos querer ajustar um pouco a configuração da otimização , evitando uma reescrita do objeto predefinido:
export default {
build: {
extend(config, { isClient }) {
if (isClient) {
config.optimization.splitChunks.maxSize = 200000
}
}
}
}
Inspecionar a Configuração da Webpack
Para projetos complexos e depuração, às vezes é útil verificar como será a configuração final da Webpack. Felizmente, podemos executar o comando nuxt webpack de dentro do nosso projeto para gerar a configuração. Consultar este pedido de atualização de repositório #7029 para obter mais detalhes.
Adicionar Extensões de Webpack
No nosso ficheiro nuxt.config.js, sob a opção build, podemos passar a opção plugins da Webpack, da mesma maneira que o faríamos num ficheiro webpack.config.js .
Neste exemplo, adicionamos o método ProvidePlugin embutido da Webpack para carregar automaticamente módulos de JavaScript (lodash e jQuery) ao invés de ter que importá-los com import ou require em todos os lugares.
import webpack from 'webpack'
export default {
build: {
plugins: [
new webpack.ProvidePlugin({
// módulos globais
$: 'jquery',
_: 'lodash'
})
]
}
}
Nota: podemos não precisar de jQuery numa aplicação baseada em Vue.
Com a Nuxt, também podemos controlar o contexto de execução das extensões: se estas devem ser executadas nas construções do client ou do server (ou diferenciar as construções de dev e prod) dentro da build.extend , onde também podemos passar manualmente as extensões da Webpack.
Estender a Webpack para Carregar Ficheiros de Áudio
Os ficheiros de áudio devem ser processados pelo file-loader. Este carregador já está incluído na configuração predefinida da Webpack, mas não está configurado para lidar com os ficheiros de áudio. Precisamos de estender a sua configuração predefinida no nuxt.config.js:
export default {
build: {
extend(config, ctx) {
config.module.rules.push({
test: /\.(ogg|mp3|wav|mpe?g)$/i,
loader: 'file-loader',
options: {
name: '[path][name].[ext]'
}
})
}
}
}
Agora podemos importar os ficheiros de áudio desta maneira <audio :src="require('@/assets/water.mp3')" controls></audio>.
Se quisermos apenas escrever: <audio src="@/assets/water.mp3" controls></audio>, precisamos dizer ao vue-loader para requerer automaticamente os nossos ficheiros de áudio quando os referenciarmos com o atributo src:
export default {
build: {
loaders: {
vue: {
transformAssetUrls: {
audio: 'src'
}
}
},
extend(config, ctx) {
config.module.rules.push({
test: /\.(ogg|mp3|wav|mpe?g)$/i,
loader: 'file-loader',
options: {
name: '[path][name].[ext]'
}
})
}
}
}
Editar o Hospedeiro e a Porta
Por predefinição, o hospedeiro do servidor de desenvolvimento da Nuxt é o localhost, o qual apenas pode ser acessado de dentro da máquina hospedeira. Para podermos ver a nossa aplicação noutro dispositivo temos de modificar o hospedeiro. Podemos modificar o nosso hospedeiro no nosso ficheiro nuxt.config.js.
O hospedeiro '0.0.0.0' é designado para dizer a Nuxt para resolver um endereço de hospedeiro, o qual é acessível a conexões fora da máquina hospedeira (por exemplo, rede local). Se ao hospedeiro for atribuído o valor de sequência de caracteres '0' (não 0, que é falso), ou '0.0.0.0' o nosso endereço de protocolo de internet local será atribuída à nossa aplicação da Nuxt:
export default {
server: {
host: '0' // predefinida como: localhost
}
}
Também podemos alterar o número da porta a partir da porta predefinida de 3000:
export default {
server: {
port: 8000 // predefinida como: 3000
}
}
'0' (não 0, que é falso), um número de porta aleatório será atribuído à nossa aplicação da Nuxt.Embora possamos modificar isto no ficheiro nuxt.config.js, não é aconselhável fazê-lo, porque pode causar-nos problemas ao hospedar o nosso sítio. É muito melhor modificar o hospedeiro e a porta diretamente no comando de execução do desenvolvimento:
HOST=0 PORT=8000 npm run dev
ou criar um programa no nosso package.json:
"scripts": {
"dev:host": "nuxt --hostname '0' --port 8000"
}
Configuração Assíncrona
Embora seja melhor usar a configuração normal export default {}, podemos ter uma configuração assíncrona exportando uma função assíncrona que retorna o objeto de configuração:
import axios from 'axios'
export default async () => {
const data = await axios.get('https://api.nuxtjs.dev/posts')
return {
head: {
title: data.title
//... o resto da configuração
}
}
}
axios não pode ser utilizado no nuxt.config.js. Precisaremos importar o axios e configurá-lo novamente.Configurações Adicionais
nuxt.config.js tem mais opções de personalização e configuração! Consultar todas as chaves no glossário de configuração .
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