plugins
O Nuxt possui um sistema de plugins para usar plugins do Vue e mais na criação da sua aplicação Vue.
O Nuxt lê automaticamente os arquivos no diretório plugins/
e os carrega na criação da aplicação Vue.
Todos os plugins dentro são registrados automaticamente, você não precisa adicioná-los separadamente no seu nuxt.config
.
Você pode usar o sufixo .server
ou .client
no nome do arquivo para carregar um plugin apenas no lado do servidor ou do cliente.
Plugins Registrados
Apenas arquivos no nível superior do diretório (ou arquivos index dentro de qualquer subdiretório) serão registrados automaticamente como plugins.
-| plugins/
---| foo.ts // escaneado
---| bar/
-----| baz.ts // não escaneado
-----| foz.vue // não escaneado
-----| index.ts // atualmente escaneado, mas obsoleto
Apenas foo.ts
e bar/index.ts
seriam registrados.
Para adicionar plugins em subdiretórios, você pode usar a opção plugins
no nuxt.config.ts
:
export default defineNuxtConfig({
plugins: [
'~/plugins/bar/baz',
'~/plugins/bar/foz'
]
})
Criando Plugins
O único argumento passado para um plugin é nuxtApp
.
export default defineNuxtPlugin(nuxtApp => {
// Fazendo algo com nuxtApp
})
Plugins com Sintaxe de Objeto
Também é possível definir um plugin usando uma sintaxe de objeto, para casos de uso mais avançados. Por exemplo:
export default defineNuxtPlugin({
name: 'my-plugin',
enforce: 'pre', // ou 'post'
async setup (nuxtApp) {
// isso é equivalente a um plugin funcional normal
},
hooks: {
// Você pode registrar diretamente hooks de runtime do Nuxt app aqui
'app:created'() {
const nuxtApp = useNuxtApp()
// faça algo no hook
}
},
env: {
// Defina este valor como `false` se você não quiser que o plugin seja executado ao renderizar componentes apenas no servidor ou em ilhas.
islands: true
}
})
Se você estiver usando a sintaxe de objeto, as propriedades são analisadas estaticamente para produzir uma construção mais otimizada. Portanto, você não deve defini-las em tempo de execução. :br
Por exemplo, definir enforce: import.meta.server ? 'pre' : 'post'
derrotaria qualquer otimização futura que o Nuxt possa fazer para seus plugins.
O Nuxt pré-carrega estaticamente qualquer ouvinte de hook ao usar a sintaxe de objeto, permitindo que você defina hooks sem precisar se preocupar com a ordem de registro dos plugins.
Ordem de Registro
Você pode controlar a ordem em que os plugins são registrados prefixando com numeração 'alfabética' nos nomes dos arquivos.
plugins/
| - 01.myPlugin.ts
| - 02.myOtherPlugin.ts
Neste exemplo, 02.myOtherPlugin.ts
poderá acessar qualquer coisa que foi injetada por 01.myPlugin.ts
.
Isso é útil em situações onde você tem um plugin que depende de outro plugin.
Caso você seja novo na numeração 'alfabética', lembre-se de que os nomes dos arquivos são ordenados como strings, não como valores numéricos. Por exemplo, 10.myPlugin.ts
viria antes de 2.myOtherPlugin.ts
. É por isso que o exemplo prefixa números de um dígito com 0
.
Estratégia de Carregamento
Plugins Paralelos
Por padrão, o Nuxt carrega plugins sequencialmente. Você pode definir um plugin como parallel
para que o Nuxt não espere até o final da execução do plugin antes de carregar o próximo plugin.
export default defineNuxtPlugin({
name: 'my-plugin',
parallel: true,
async setup (nuxtApp) {
// o próximo plugin será executado imediatamente
}
})
Plugins com Dependências
Se um plugin precisa esperar por outro plugin antes de ser executado, você pode adicionar o nome do plugin ao array dependsOn
.
export default defineNuxtPlugin({
name: 'depends-on-my-plugin',
dependsOn: ['my-plugin'],
async setup (nuxtApp) {
// este plugin esperará pelo final da execução de `my-plugin` antes de ser executado
}
})
Usando Composables
Você pode usar composables assim como utils dentro de plugins Nuxt:
export default defineNuxtPlugin((nuxtApp) => {
const foo = useFoo()
})
No entanto, tenha em mente que há algumas limitações e diferenças:
Se um composable depende de outro plugin registrado posteriormente, ele pode não funcionar. :br
Os plugins são chamados em ordem sequencialmente e antes de tudo. Você pode usar um composable que depende de outro plugin que ainda não foi chamado.
Se um composable depende do ciclo de vida do Vue.js, ele não funcionará. :br
Normalmente, os composables do Vue.js estão vinculados à instância do componente atual, enquanto os plugins estão vinculados apenas à instância nuxtApp
.
Fornecendo Helpers
Se você gostaria de fornecer um helper na instância NuxtApp
, retorne-o do plugin sob uma chave provide
.
※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/guide/directory-structure/plugins