Diretório de Recursos
O diretório assets contém recursos ou ativos não compilados, como ficheiros .styl, .stylus ou .sass, .scss, imagens, ou tipos de letras (também conhecidos como fontes).
Imagens
Dentro dos nossos modelos de marcação .vue, se precisarmos vincular ao nosso diretório assets, usamos ~/assets/your_image.png com uma barra antes de assets:
<template>
<img src="~/assets/your_image.png" />
</template>
Dentro dos nossos ficheiros .cssm se precisarmos de referenciar o nosso diretório assets, utilizamos ~assets/your_image.png (sem barra):
background: url('~assets/banner.svg');
Quando trabalhamos com imagens dinâmicas, precisamos de utilizar a função require():
<img :src="require(`~/assets/img/${image}.jpg`)" />
Estilos
A Nuxt permite-nos definir os ficheiros .css, módulos, e bibliotecas que queremos definir globalmente (incluídos em todas as páginas). No nuxt.config.js, podemos adicionar facilmente os nossos estilos utilizando a propriedade css:
export default {
css: [
// Carregar um módulo de Node.js diretamente
// (neste caso, é um ficheiro `.scss` ou `.sass`).
'bulma',
// Ficheiro `.css` no projeto
'~/assets/css/main.css',
// Ficheiro `.scss` no projeto
'~/assets/css/main.scss'
]
}
Sass
Caso queiramos utilizar a sass precisamos ter certeza de que instalamos os pacotes sass e sass-loader:
yarn add --dev sass sass-loader@10
npm install --save-dev sass sass-loader@10
A Nuxt deteta automaticamente o tipo de ficheiro pela sua extensão de ficheiro (.sass ou .scss) e utiliza o carregador do pré-processador correto para a Webpack. Continuaremos a ter de instalar o carregador necessário se precisarmos de os utilizar:
Tipos de Letra
Podemos utilizar tipos de letra (mais conhecidos como fontes) locais adicionando-os à nossa pasta de recursos (assets/). Uma vez adicionados, podemos acessá-los através do nosso .css utilizando a @font-face:
-| assets
----| fonts
------| DMSans-Regular.ttf
------| DMSans-Bold.ttf
@font-face {
font-family: 'DM Sans';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('~assets/fonts/DMSans-Regular.ttf') format('truetype');
}
@font-face {
font-family: 'DM Sans';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('~assets/fonts/DMSans-Bold.ttf') format('truetype');
}
.css não são carregados automaticamente. Precisamos adicioná-los usando a propriedade de configuração css .Recursos da Webpack
Por predefinição, a Nuxt usa a vue-loader, file-loader, e a url-loader da Webpack para servir os nossos recursos (também conhecidos como ativos). Também podemos usar o diretório estático (static/) para recursos (assets/) que não devem ser executados pela Webpack:
Webpack
A vue-loader processa os nossos ficheiros de estilo e modelos de marcação automaticamente com a css-loader e a compilara de modelos de marcação de hipertexto com extensão .vue. Neste processo de compilação, todos os endereços de localização de recurso de recursos como <img src="...">, background: url(...), e @import de folha de estilo são resolvidos como dependências do módulo:
Por exemplo, temos esta árvore de ficheiros:
-| assets/
----| image.png
-| pages/
----| index.vue
Se usarmos url('~assets/image.png') no nosso ficheiro de folha de estilo, este será traduzido para require('~/assets/image.png').
~/ não será resolvido corretamente nos nossos ficheiros de folha de estilo. Devemos utilizar ~assets (sem barra) nas referências de folha de estilo url, ou seja, background: url("~assets/banner.svg").Se referenciarmos esta imagem no nosso pages/index.vue:
<template>
<img src="~/assets/image.png" />
</template>
Será compilada em:
createElement('img', { attrs: { src: require('~/assets/image.png') } })
Uma vez que .png não é um ficheiro de código .js, a Nuxt configura a Webpack para utilizar a file-loader e a url-loader para os tratar por nós.
Os vantagens estas carregadoras são:
-
A
file-loaderpermite-nos designar onde copiar e colocar o ficheiro de recurso, e como nomeá-lo usando baralhos de versão para melhorar o armazenamento transitório. Em produção. beneficiaremos de um armazenamento transitório de longo prazo por predefinição! -
A
url-loaderpermite-nos inserir condicionalmente ficheiros como endereços de localização de recurso de dados debase64se estes forem menores do que um determinado limite. Isto pode reduzir o número de pedidos do protocolo de hipertexto para ficheiros banais. Se um ficheiro for maior do que o limite, regressa automaticamente afile-loader.
Para estas duas carregadoras, a configuração predefinida é:
// https://github.com/nuxt/nuxt/blob/2.x-dev/packages/webpack/src/config/base.js#L382-L411
{
test: /\.(png|jpe?g|gif|svg|webp|avif)$/i,
use: [{
loader: 'url-loader',
options: {
esModule: false,
limit: 1000, // 1kB
name: 'img/[name].[contenthash:7].[ext]'
}
}]
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/i,
use: [{
loader: 'url-loader',
options: {
esModule: false,
limit: 1000, // 1kB
name: 'fonts/[name].[contenthash:7].[ext]'
}
}]
},
{
test: /\.(webm|mp4|ogv)$/i,
use: [{
loader: 'file-loader',
options: {
esModule: false,
name: 'videos/[name].[contenthash:7].[ext]'
}
}]
}
O que significa que todos os ficheiros com menos de 1kb serão incluídos como endereço de localização de recurso de dados de base64. Caso contrário, a imagem e o tipo de letra serão copiados na sua pasta correspondente (no diretório .nuxt) com um nome contendo uma sequência baralhada de caracteres de versão para melhorar o armazenamento transitório.
Ao lançar a nossa aplicação com nuxt, o nosso modelo de marcação em pages/index.vue:
<template>
<img src="~/assets/your_image.png" />
</template>
Será transformado em:
<img src="/_nuxt/img/your_image.0c61159.png" />
Se quisermos alterar as configurações do carregador, utilizamos a build.extend .
Pseudónimos
Por predefinição, o diretório de origem (srcDir) e o diretório raiz (rootDir) são os mesmos. Podemos usar o pseudónimo ~ para o diretório de origem. Ao invés de escrevermos caminhos relativos como ../assets/your_image.png, podemos usar ~/assets/your_image.png.
Ambas as opções permitem obter os mesmos resultados:
<template>
<div>
<img src="../assets/your_image.png" />
<img src="~/assets/your_image.png" />
</div>
</template>
Recomendamos a utilização do ~ como um pseudónimo. O @ ainda é suportado, mas não funcionará em todos os casos, como com imagens de fundo no nosso ficheiro de folha de estilo (.css).
Podemos utilizar o pseudónimo de ~~ ou @@ para o diretório raiz.
~ com (Option + ñ) no macOS, ou (Alt gr + 4) no Windows.
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