A propriedade components
O Nuxt 2.13+ pode examinar e importar automaticamente os seus componentes usando o módulo @nuxt/components
@nuxt/components ao buildModules dentro do ficheiro nuxt.config.js.-
Tipo:
BooleanouArray -
Valor padrão:
false
Quando definir para true ou para um objeto de opções, o Nuxt incluirá @nuxt/components e importar automaticamente o seus componentes sempre que você user eles dentro das suas páginas, esquemas (e outros componentes).
Configuração
export default {
// Isto irá carregar automaticamente os componentes da pasta `~/components`
components: true
}
Como o components: true, por padrão o diretório ~/components será incluído.
No entanto você pode personalizar comportamento da descoberta automática pelo fornecimento de diretórios adicionais para examinar:
export default {
components: [
// Equivalente a { path: '~/components' }
'~/components',
{ path: '~/components/other', extensions: ['vue'] }
]
}
A propriedade path
Cada item pode ser tanto uma sequência de caracteres ou um objeto. Uma valor de sequência de caracteres é um atalho para { path: }.
A propriedade path
- Obrigatório
-
Tipo:
String
O caminho (absoluto ou relativo) para o diretório que contém seus componentes.
Você pode usar os apelidos do Nuxt (~ ou @) para referir aos diretórios dentro do projeto ou usar diretamente um caminho de pacote npm (similar ao uso de require dentro do seu projeto).
A propriedade extensions
-
Tipo:
Array<string> -
Valor padrão:
-
Extensões suportadas pelo construtor do Nuxt (
builder.supportedExtensions) -
Extensões padrão suportadas
['vue', 'js']ou['vue', 'js', 'ts', 'tsx']dependendo do seu ambiente
-
Extensões suportadas pelo construtor do Nuxt (
Exemplo: Suportar a estrutura de componente de vários ficheiros
Se você preferir separar seus componentes de ficheiro único (SFCs) em .js, .vue e .css, você pode escolher apenas examinar ficheiros .vue:
| components
---| componentC
------| componentC.vue
------| componentC.js
------| componentC.scss
// nuxt.config.js
export default {
components: [{ path: '~/components', extensions: ['vue'] }]
}
A propriedade pattern
-
Tipo:
string(padrão glob ) -
Valor padrão:
**/*.${extensions.join(',')}
Dentro do path (caminho) especificado, apenas ficheiros que corresponderem a este padrão serão incluídos.
A propriedade ignore
-
Tipo:
Array -
Itens:
string(padrão glob ) -
Valor padrão:
[]
Padrões para excluir ficheiros dentro do path (caminho) especificado.
A propriedade prefix
-
Tipo:
String -
Valor padrão:
''(sem prefixo)
Prefixa todos componentes correspondidos.
O exemplo abaixo adiciona o prefixo awesome-/awesome ao nome dos componentes dentro do diretório awesome/.
// nuxt.config.js
export default {
components: [
'~/components',
{ path: '~/components/awesome/', prefix: 'awesome' }
]
}
| components/
---| awesome/
------| Button.vue
---| Button.vue
<template>
<div>
<AwesomeButton>Click on me 🤘</AwesomeButton>
<button>Click on me</button>
</div>
</template>
A propriedade pathPrefix
-
Tipo:
Boolean -
Valor padrão:
true
Prefixa o nome do componente pelo seu caminho.
A propriedade watch
-
Tipo:
Boolean -
Valor padrão:
true
Observa mudanças no path (caminho) especificado, incluindo adição e eliminação de ficheiros.
A propriedade transpile
-
Tipo:
Boolean -
Valor padrão:
'auto'
Transpila o path (caminho) especificado usando o build.transpile . Por padrão ('auto') definirá transpile: true se o node_modules estiver dentro path (caminho).
A propriedade level
-
Tipo:
Number -
Valor padrão:
0
Níveis são usados para definir permissão sobrescrevendo componentes que tem o mesmo nome dentro dentro de diretórios diferentes. Isto pode ser útil para autores de bibliotecas que desejam permitir os usuários sobrescrever seus componentes, ou personalizar os temas.
export default {
components: [
'~/components', // O nível padrão é 0
{ path: 'my-theme/components', level: 1 }
]
}
Um componente dentro de ~/components irá então sobrescrever um componente com o mesmo nome dentro de my-theme/components. O valor mais baixo recebe prioridade.
Avançado
Sobrescrevendo Componentes
É possível ter uma maneira para sobrescrever componentes usando a opção level . Isto é muito útil para autores de módulos e temas.
Considerando esta estrutura:
| node_modules/
---| my-theme/
------| components/
---------| Header.vue
| components/
---| Header.vue
Então definindo dentro do nuxt.config:
components: [
'~/components', // O nível padrão é 0
{ path: 'node_modules/my-theme/components', level: 1 }
]
O nosso components/Header.vue sobrescreverá o nosso componente do tema visto que o valor nível mais baixo recebe prioridade.
Autores de Biblioteca
Produzir bibliotecas de componentes de Vue com sacudidela de árvore (tree-shaking) automática e registo de componente é agora super fácil✨
Este módulo expõe um gatilho nomeado components:dirs assim você pode facilmente estender a lista de diretório sem a exigência de configuração do usuário dentro do seu módulo do Nuxt.
Imagina uma estrutura de diretório como esta:
| node_modules/
---| awesome-ui/
------| components/
---------| Alert.vue
---------| Button.vue
------| nuxt.js
| pages/
---| index.vue
| nuxt.config.js
Depois dentro awesome-ui/nuxt.js você pode usar o gatilho components:dir:
import { join } from 'path'
export default function () {
this.nuxt.hook('components:dirs', dirs => {
// Adiciona diretório ./components à lista
dirs.push({
path: join(__dirname, 'components'),
prefix: 'awesome'
})
})
}
E é isso! Agora dentro do seu projeto, você pode importar sua biblioteca de UI como um módulo do Nuxt dentro do seu nuxt.config.js:
export default {
buildModules: ['@nuxt/components', 'awesome-ui/nuxt']
}
E use o módulo de componentes diretamente (prefixado com awesome-), em nossa pages/index.vue:
<template>
<div>
My <AwesomeButton>UI button</AwesomeButton>!
<awesome-alert>Here's an alert!</awesome-alert>
</div>
</template>
Ele importará automaticamente os componentes somente se usado e se também suportar HMR quando estiver atualizando seus componentes dentro de node_modules/awesome-ui/components/.
Proximo: publicar o seu módulo awesome-ui no npm e partilhar ele com outros Nuxteres ✨
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