You are browsing Nuxt 2 docs. Go to Nuxt 3 docs, or learn more about Nuxt 2 Long Term Support.

Translated page Contents of this page might be outdated.

O diretório assets

O diretório assets contém recursos não compilados tais como ficheiros Stylus ou Sass, imagens, ou fontes.

As imagens

Dentro dos seus modelos vue, se você precisar ligar ao seu diretório assets, use ~/assets/your_image.png com uma barra antes do assets.

<template>
  <img src="~/assets/your_image.png" />
</template>

Dentro dos seus ficheiros css, se você precisar referenciar o seu diretório assets, use ~assets/your_image.png (sem uma barra).

background: url('~assets/banner.svg');

Quando estiveres trabalhando com imagens dinâmicas você precisará usar a função require()

<img :src="require(`~/assets/img/${image}.jpg`)" />

Os estilos

O Nuxt permite você definir ficheiros/módulos/bibliotecas CSS que você quiser definir globalmente (incluído dentro de cada página). Dentro do ficheiro nuxt.config.js você pode facilmente adicionar seus estilos usando a propriedade CSS.

nuxt.config.js
export default {
  css: [
    // Carrega um módulo do Node.js diretamente (aqui está um ficheiro Sass)
    'bulma',
    // Ficheiro CSS dentro do projeto
    '~/assets/css/main.css',
    // Ficheiro SCSS dentro do projeto
    '~/assets/css/main.scss'
  ]
}

O Sass

No caso de você quiser usar sass certifique-se que você tem os pacotes sass e sass-loader instalado.

Yarn
yarn add --dev sass sass-loader@10
NPM
npm install --save-dev sass sass-loader@10

O Nuxt irá automaticamente adivinhar o tipo de ficheiro pela sua extensão e usar o carregador do pré-processador adequado para o webpack. Você continuará a precisar instalar o carregador exigido se você precisar usar eles.

As fontes

Você pode usar fontes locais ao adicionar elas à sua pasta assets. Uma vez que eles têm sido adicionados você pode então acessar eles através do seu CSS usando o @font-face.

-| assets
----| fonts
------| DMSans-Regular.ttf
------| DMSans-Bold.ttf
assets/main.css
@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');
}
Os ficheiros CSS não são automaticamente carregados. Adicione eles usando a propriedade de configuração do CSS .

Os recursos do webpack

Por padrão, o Nuxt usa o vue-loader do webpack, file-loader, e o url-loader para servir seus assets. Você também pode usar o diretório static para os recursos que não devem ser processados pelo webpack

Webpack

O vue-loader processa automaticamente seu estilo e ficheiros de modelos com o css-loader e o compilador de modelos do Vue. Neste processo de compilação, todas URLs do recurso tais como <img src="...">, background: url(...), e os @import do CSS são resolvidos como módulo de dependências.

Por exemplo, nós temos esta árvore de ficheiro:

-| assets/
----| image.png
-| pages/
----| index.vue

Se você usar url('~assets/image.png') dentro do seu CSS, ele será traduzido para require('~/assets/image.png').

O apelido ~/ não será resolvido corretamente dentro de ficheiros CSS. Você deve usar ~assets (sem uma barra) dentro das referências de url de CSS, exemplo background: url("~assets/banner.svg")

Se você referenciar aquela imagem dentro do seu pages/index.vue:

pages/index.vue
<template>
  <img src="~/assets/image.png" />
</template>

Ela será compilada para:

createElement('img', { attrs: { src: require('~/assets/image.png') } })

Por .png não ser um ficheiro JavaScript, o Nuxt configura o webpack para usar file-loader e url-loader para manipular eles por você.

Os benefícios desses carregadores são:

O file-loader permite você designar onde copiar e colocar o ficheiro de recurso, e como nomear ele usando a versão com hash para um cacheamento melhor. Em produção, você tirará proveito de cacheamento de longo período por padrão!

O url-loader permite você condicionalmente embutir os ficheiros como URLs de dados em base64 se eles forem menores do que um determinado limite. Isto pode reduzir o número de requisições HTTP para ficheiros triviais.

Para estes dois carregadores, a configuração padrão é:

// 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 cada ficheiro abaixo de 1kb será embutido como URL de dado na base64. Caso contrário, a imagem/fonte serão copiados para suas pastas correspondentes (dentro do diretório .nuxt) com o nome contendo a versão em hash para um cacheamento melhor.

Quando estiver lançando a sua aplicação com nuxt, o seu modelo dentro de pages/index.vue:

pages/index.vue
<template>
  <img src="~/assets/your_image.png" />
</template>

Será transformado em:

<img src="/_nuxt/img/your_image.0c61159.png" />

Se você quiser mudar as configurações do carregador, use o build.extend .

Os apelidos

Por padrão o diretório fonte (srcDir) e diretório raiz (rootDir) são o mesmo. Você pode usar o apelido ~ para o diretório fonte. Ao invés de escrever caminhos relativos como ../assets/your_image.png você pode usar ~/assets/your_image.png.

Ambos alcançarão os mesmos resultados.

components/Avatar.vue
<template>
  <div>
    <img src="../assets/your_image.png" />
    <img src="~/assets/your_image.png" />
  </div>
</template>

Nós recomendamos usar o ~ como um apelido. @ continua sendo suportado mas não funcionará em todos casos tais como com imagens de fundo dentro do seu css.

Você pode usar os apelidos ~~ ou @@ para o diretório raiz.

Dica: No teclado Espanhol você pode acessar o ~ com (Option + ñ) no Mac OS, ou (Alt Gr + 4) no Windows