nuxt logo

Tradução da Documentação (Não Oficial)

Nuxt.js
Version:v3.17

Auto-importações

O Nuxt auto-importa componentes, composables, funções auxiliares e APIs do Vue.

O Nuxt auto-importa componentes, composables e APIs do Vue.js para serem usados em toda a sua aplicação sem a necessidade de importá-los explicitamente.

app.vue
const count = ref(1) // ref é auto-importado

Graças à sua estrutura de diretórios opinativa, o Nuxt pode auto-importar seus components/, composables/ e utils/.

Ao contrário de uma declaração global clássica, o Nuxt preserva tipagens, autocompletes e dicas em IDEs, e inclui apenas o que é usado no seu código de produção.

Na documentação, toda função que não é explicitamente importada é auto-importada pelo Nuxt e pode ser usada como está no seu código. Você pode encontrar uma referência para componentes, composables e utilitários auto-importados na seção de API.

No diretório server, o Nuxt auto-importa funções e variáveis exportadas de server/utils/.

Você também pode auto-importar funções exportadas de pastas personalizadas ou pacotes de terceiros configurando a seção imports do seu arquivo nuxt.config.

Auto-importações Embutidas

O Nuxt auto-importa funções e composables para realizar busca de dados, acessar o contexto do aplicativo e configuração de runtime, gerenciar estado ou definir componentes e plugins.

/* useFetch() é auto-importado */
const { data, refresh, status } = await useFetch('/api/hello')

O Vue expõe APIs de Reatividade como ref ou computed, bem como hooks de ciclo de vida e auxiliares que são auto-importados pelo Nuxt.

/* ref() e computed() são auto-importados */
const count = ref(1)
const double = computed(() => count.value * 2)

Composables do Vue e Nuxt

Ao usar os composables da API de Composição embutidos fornecidos pelo Vue e Nuxt, esteja ciente de que muitos deles dependem de serem chamados no contexto correto.

Durante o ciclo de vida de um componente, o Vue rastreia a instância temporária do componente atual (e de forma semelhante, o Nuxt rastreia uma instância temporária do nuxtApp) através de uma variável global, e então a desfaz no mesmo tick. Isso é essencial ao renderizar no servidor, tanto para evitar a poluição de estado entre requisições (vazamento de uma referência compartilhada entre dois usuários) quanto para evitar vazamentos entre diferentes componentes.

Isso significa que (com pouquíssimas exceções) você não pode usá-los fora de um plugin Nuxt, middleware de rota Nuxt ou função de configuração do Vue. Além disso, você deve usá-los de forma síncrona - ou seja, você não pode usar await antes de chamar um composable, exceto dentro de blocos <script setup>, dentro da função de configuração de um componente declarado com defineNuxtComponent, em defineNuxtPlugin ou em defineNuxtRouteMiddleware, onde realizamos uma transformação para manter o contexto síncrono mesmo após o await.

Se você receber uma mensagem de erro como Nuxt instance is unavailable, provavelmente significa que você está chamando um composable do Nuxt no lugar errado no ciclo de vida do Vue ou Nuxt.

Ao usar um composable que requer o contexto do Nuxt dentro de um componente não-SFC, você precisa envolver seu componente com defineNuxtComponent em vez de defineComponent

Veja também guide > going-further > experimental-features#asynccontext Veja também github.com > nuxt > nuxt > issues > 14269

Exemplo de código quebrado:

composables/example.ts
// tentando acessar a configuração de runtime fora de um composable
const config = useRuntimeConfig()

export const useMyComposable = () => {
  // acessando a configuração de runtime aqui
}

Exemplo de código funcionando:

composables/example.ts
export const useMyComposable = () => {
  // Porque seu composable é chamado no lugar certo no ciclo de vida,
  // useRuntimeConfig funcionará aqui
  const config = useRuntimeConfig()

  // ...
}

Auto-importações Baseadas em Diretório

O Nuxt auto-importa diretamente arquivos criados em diretórios definidos:

Editar e visualizar o código de exemploexamples > features > auto-imports

ref e computed auto-importados não serão descompactados em um <template> de componente. :br Isso se deve a como o Vue trabalha com refs que não estão no nível superior do template. Você pode ler mais sobre isso na documentação do Vue.

Importações Explícitas

O Nuxt expõe cada auto-importação com o alias #imports que pode ser usado para tornar a importação explícita, se necessário:

import { ref, computed } from '#imports'

const count = ref(1)
const double = computed(() => count.value * 2)

Desativando Auto-importações

Se você quiser desativar a auto-importação de composables e utilitários, pode definir imports.autoImport como false no arquivo nuxt.config.

nuxt.config.ts
export default defineNuxtConfig({
  imports: {
    autoImport: false
  }
})

Isso desativará completamente as auto-importações, mas ainda é possível usar importações explícitas de #imports.

Desativando Parcialmente Auto-importações

Se você quiser que funções específicas do framework, como ref, continuem sendo auto-importadas, mas deseja desativar auto-importações para seu próprio código (por exemplo, composables personalizados), pode definir a opção imports.scan como false no seu arquivo nuxt.config.ts:

export default defineNuxtConfig({
  imports: {
    scan: false
  }
})

Com esta configuração:

  • Funções do framework como ref, computed ou watch ainda funcionarão sem a necessidade de importações manuais.
  • Código personalizado, como composables, precisará ser importado manualmente em seus arquivos.

Atenção: Esta configuração tem certas limitações:

  • Se você estruturar seu projeto com camadas, precisará importar explicitamente os composables de cada camada, em vez de confiar em auto-importações.
  • Isso quebra o recurso de substituição do sistema de camadas. Se você usar imports.scan: false, certifique-se de entender esse efeito colateral e ajuste sua arquitetura de acordo.

Componentes Auto-importados

O Nuxt também importa automaticamente componentes do seu diretório ~/components, embora isso seja configurado separadamente da auto-importação de composables e funções utilitárias.

Veja também guide > directory-structure > components

Para desativar a auto-importação de componentes do seu próprio diretório ~/components, você pode definir components.dirs como um array vazio (embora note que isso não afetará componentes adicionados por módulos).

nuxt.config.ts
export default defineNuxtConfig({
  components: {
    dirs: []
  }
})

Auto-importação de Pacotes de Terceiros

O Nuxt também permite auto-importação de pacotes de terceiros.

Se você estiver usando o módulo Nuxt para esse pacote, é provável que o módulo já tenha configurado auto-importações para esse pacote.

Por exemplo, você poderia habilitar a auto-importação do composable useI18n do pacote vue-i18n assim:

nuxt.config.ts
export default defineNuxtConfig({
  imports: {
    presets: [
      {
        from: 'vue-i18n',
        imports: ['useI18n']
      }
    ]
  }
})