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 .