O diretório modules
O Nuxt fornece um sistema de módulo de alta ordem que torna possível estender o núcleo. Os módulos são funções que são chamados sequencialmente sempre o Nuxt estiver iniciando.
Explorando os módulos do Nuxt
Descubra nossa lista de módulos para super carregar o seu projeto Nuxt, criado pela equipa do Nuxt e pela comunidade.
- 165+ Módulos
 - 105+ Mantenedores
 
Enquanto estiver desenvolvendo aplicações para produção com Nuxt você pode achar que o núcleo de funcionalidade do framework não é suficiente. O Nuxt pode ser estendido com opções de configuração e plugins, mas manter essas personalizações através de vários projetos é tedioso, repetitivo e consume tempo. Por outro lado, atender a cada necessidade do projeto fora da caixa tornaria o Nuxt muito complexo e difícil de usar.
Esta é uma das razões do porquê o Nuxt fornecer um sistema de módulo de alta ordem que torna possível estender o núcleo. Os módulos são funções que são chamados sequencialmente sempre o Nuxt estiver iniciando. O framework espera cada módulo terminar antes de continuar. Desta maneira, os módulos podem personalizar quase qualquer aspeto da sua aplicação. Graças o desenho modular do Nuxt (baseado no Tapable do webpack), os módulos podem facilmente registar gatilhos para certos pontos de entrada como a inicialização do construtor. Os módulos podem também sobrescrever modelos, configurar os carregadores do webpack, adicionar bibliotecas CSS, e realizar muitas outras tarefas úteis.
O melhor de tudo, os módulos do Nuxt podem ser incorporados dentro dos pacotes npm. Isto torna possível re-usar através dos projetos e partilhar com a comunidade, ajudando a criar um ecossistema de recursos adicionáveis de alta qualidade.
A propriedade modules
Os módulos são extensões do Nuxt que podem estender a funcionalidade do núcleo do framework e adicionar integrações sem fim. Uma vez você ter instalado os módulos você pode então adicionar eles ao seu ficheiro nuxt.config.js dentro da propriedade modules.
export default {
  modules: [
    // Usando o nome do pacote
    '@nuxtjs/axios',
    // Relativo ao diretório fonte do seu projeto (srcDir)
    '~/modules/awesome.js',
    // Fornecendo opções
    ['@nuxtjs/google-analytics', { ua: 'X1234567' }],
    // Definição em linha
    function () {}
  ]
}
 O Nuxt tenta resolver cada item dentro do array de módulos usando o caminho exigido pelo node (dentro do node_modules) e depois resolverá a partir do srcDir se o apelido @ for usado.
Os módulos devem exportar uma função para destacar a construção/tempo de execução e opcionalmente retorna uma promessa até que o trabalho deles esteja terminado. Repare que eles são importados em tempo de execução então eles devem já estar transpilados se estiverem usando as funcionalidades modernas do ES6.
Escreva o seu próprio módulo
Os módulos são funções. Eles podem ser empacotados como módulos npm ou diretamente incluídos dentro do código-fonte do seu projeto.
export default {
  exampleMsg: 'hello',
  modules: [
    // Uso símples
    '~/modules/example',
    // Passando as opções diretamente
    ['~/modules/example', { token: '123' }]
  ]
}
 export default function ExampleModule(moduleOptions) {
  console.log(moduleOptions.token) // '123'
  console.log(this.options.exampleMsg) // 'hello'
  this.nuxt.hook('ready', async nuxt => {
    console.log('Nuxt is ready')
  })
}
// Obrigatório se estiver publicando o módulo como pacote npm
module.exports.meta = require('./package.json')
 1) ModuleOptions
moduleOptions: este é o objeto passado usando o array modules pelo usuário. Podemos usar ele para personalizar seu comportamento,
Opções de alto nível
Algumas vezes é muito mais conveniente podermos usar opções de alto nível enquanto estivermos registando módulos dentro do nuxt.config.js. Isto permite-nos combinar várias fontes de opções.
export default {
  modules: [['@nuxtjs/axios', { anotherOption: true }]],
  // o módulo axios está ciente disto ao usar `this.options.axios`
  axios: {
    option1,
    option2
  }
}
 2) this.options
this.options: Você pode acessar diretamente as opções do Nuxt usando esta referência. Este é o conteúdo do nuxt.config.js do usuário com todas opções padrão atribuídas a ela. Ela pode ser usada para opções partilhadas entre os módulos.
export default function (moduleOptions) {
  // `options` conterá option1, option2 e anotherOption
  const options = Object.assign({}, this.options.axios, moduleOptions)
  // ...
}
 Adicionar uma biblioteca CSS
Se o seu módulo fornecerá uma biblioteca CSS, certifique-se de realizar uma verificação para saber se o usuário já incluiu a biblioteca para evitar, e adicionar uma opção para desativar a biblioteca CSS dentro do módulo.
export default function (moduleOptions) {
  if (moduleOptions.fontAwesome !== false) {
    // Adicione o font-awesome
    this.options.css.push('font-awesome/css/font-awesome.css')
  }
}
 Emitir os recursos
Nós podemos registar os plugins do webpack para emitir os recursos durante a construção.
export default function (moduleOptions) {
  const info = 'Built by awesome module - 1.3 alpha on ' + Date.now()
  this.options.build.plugins.push({
    apply(compiler) {
      compiler.plugin('emit', (compilation, cb) => {
        // Isto gerará o `.nuxt/dist/info.txt' com os conteúdos da variável info.
        // A fonte (source) pode ser uma memória temporária também.
        compilation.assets['info.txt'] = {
          source: () => info,
          size: () => info.length
        }
        cb()
      })
    }
  })
}
 3) this.nuxt
this.nuxt: Isto é uma referência a instância atual do Nuxt. Nós podemos registar gatilhos em certos eventos do ciclo de vida.
- Ready : O Nuxt está pronto para trabalhar (ModuleContainer e Renderer prontos).
 
nuxt.hook('ready', async nuxt => {
  // O seu código personalizado vai aqui
})
 - Error: Um erro não manipulado quando estiver chamando os gatilhos.
 
nuxt.hook('error', async error => {
  // O seu código personalizado vai aqui
})
 - Close: A instância do Nuxt está fechando graciosamente.
 
nuxt.hook('close', async nuxt => {
  // O seu código personalizado vai aqui
})
 - 
Listen: O servidor interno do Nuxt começa ouvindo. (Usando o 
nuxt startounuxt dev) 
nuxt.hook('listen', async (server, { host, port }) => {
  // O seu código personalizado vai aqui
})
 this: O contexto dos módulos. Todos os módulos são chamados dentro contexto da instância ModuleContainer.
Consulte a documentação da classe ModuleContainer para conhecer os métodos disponíveis.
Executar tarefas em gatilhos específicos
O seu módulo pode precisar fazer coisas apenas sobre condições específicas e não somente durante a inicialização do Nuxt. Nós podemos usar os poderosos gatilhos do Nuxt para realizar tarefas em eventos específicos (baseado no Hookable ). O Nuxt esperará pela sua função para saber se ela retorna uma promessa ou está definida como async.
Here are some basic examples:
export default function myModule() {
  this.nuxt.hook('modules:done', moduleContainer => {
    // Isto será chamado quando todos os módulos terminarem o carregamento
  })
  this.nuxt.hook('render:before', renderer => {
    // Chamado depois do renderizador ser criado
  })
  this.nuxt.hook('build:compile', async ({ name, compiler }) => {
    // Chamado antes do compilador (padrão: webpack) começar
  })
  this.nuxt.hook('generate:before', async generator => {
    // Isto será chamado antes do Nuxt gerar suas páginas
  })
}
 Fornecer plugins
É comum que módulos forneçam um ou mais plugins quando adicionados. Por exemplo o módulo bootstrap-vue  precisaria registar a si mesmo dentro do Vue. Em tais situações nós podemos usar o auxiliar this.addPlugin.
import Vue from 'vue'
import BootstrapVue from 'bootstrap-vue/dist/bootstrap-vue.esm'
Vue.use(BootstrapVue)
 import path from 'path'
export default function nuxtBootstrapVue(moduleOptions) {
  // Registe o modelo `plugin.js`
  this.addPlugin(path.resolve(__dirname, 'plugin.js'))
}
 Observe que: Quaisquer plugins injetados pelos módulos são adicionados no princípio da lista lista de plugins. Suas opções são:
- 
Manualmente adicionar o plugin para o final da lista de plugins (
this.nuxt.options.plugins.push(...)) - Inverter a ordem dos módulos se ele depender de um outro
 
Os plugins do modelo
Os modelos registados e plugins podem influenciar o os modelos do lodash para condicionalmente mudar a saída dos plugins registados.
// Define o Google Analytics UA
ga('create', '<%= options.ua %>', 'auto')
<% if (options.debug) { %>
// Apenas código do desenvolvedor
<% } %>
 import path from 'path'
export default function nuxtGoogleAnalytics(moduleOptions) {
  // Registar o modelo `plugin.js`
  this.addPlugin({
    src: path.resolve(__dirname, 'plugin.js'),
    options: {
      // O Nuxt substituirá `options.ua` com `123` quando estiver copiando o plugin para o projeto
      ua: 123,
      // partes condicionais com `dev` será desfeito do código do plugin nas construções de produção
      debug: this.options.dev
    }
  })
}
 Registar carregadores personalizados do webpack
Nós podemos fazer o mesmo com o build.extend dentro do nuxt.config.js usando this.extendBuild.
export default function (moduleOptions) {
    this.extendBuild((config, { isClient, isServer }) => {
      // Carregador do `.foo`
      config.module.rules.push({
        test: /\.foo$/,
        use: [...]
      })
      // Personalizar carregadores existentes
      // Recorra ao código-fonte para o interior do Nuxt:
      // https://github.com/nuxt/nuxt/blob/2.x-dev/packages/webpack/src/config/base.js
      const barLoader = config.module.rules.find(rule => rule.loader === 'bar-loader')
  })
}
 Os módulos assíncronos
Nem todos os módulos farão tudo de forma síncrona. Por exemplo, você talvez queira desenvolver um módulo que precisar requisitar alguma API ou fazer operações assíncronas. Para isto, o Nuxt suporta módulos assíncronos que podem retornar uma promessa ou chamar um callback.
Use o async/await
import fse from 'fs-extra'
export default async function asyncModule() {
  // Você pode fazer trabalho assíncrono aqui usando `async`/`await`
  const pages = await fse.readJson('./pages.json')
}
 Retornar uma promessa
export default function asyncModule($http) {
  return $http
    .get('https://jsonplaceholder.typicode.com/users')
    .then(res => res.data.map(user => '/users/' + user.username))
    .then(routes => {
      // Faça alguma coisa ao estender as rotas do nuxt
    })
}
 Publicando o seu módulo
module.exports.meta: Esta linha é exigida se você estiver publicando o módulo como um pacote npm. O Nuxt usa internamente o meta para trabalhar melhor com seu pacote.
module.exports.meta = require('./package.json')
 A propriedade buildModules
Alguns módulos são apenas importados durante o tempo de desenvolvimento e construção. Usar buildModules ajuda tornar inicio da produção rápido e também diminuir significativamente o tamanho do seu diretório node_modules para deployments em produção. Recorra à documentação para cada módulo para ver se é recomendado usar a propriedade modules ou buildModules.
A diferença de uso é:
- 
Ao invés de adicionar ao 
modulesdentro donuxt.config.js, adicione aobuildModules 
export default {
  buildModules: ['@nuxtjs/eslint-module']
}
 - 
Ao invés de adicionar ao 
dependenciesdentro dopackage.json, adicione aodevDependencies 
yarn add --dev @nuxtjs/eslint-module
 npm install --save-dev @nuxtjs/eslint-module
 devDependency e usar o buildModules ao invés de modules para o nuxt.config.js.O seu módulo é um buildModules a menos que:
- Ele esteja fornecendo um serverMiddleware
 - Ele tem de registar um gatilho para o tempo de execução do Node.js (como sentry)
 - 
Ele esteja afetando o comportamento do vue-renderer ou usando um gatilho do espaço de nome 
server:ouvue-renderer - Outra coisa que esteja fora do escopo do webpack (sugestão: plugins e modelos que são compilados e estão dentro do escopo do webpack)
 
buildModules mencione que esta funcionalidade está apenas disponível a partir da versão 2.9 do Nuxt. Usuários antigos devem atualizar ou usar a secção modules.
 
        N3-rd
       
 
        Adrien Zaganelli
       
 
        Mag
       
 
        Stefan Huber
       
 
        Olga Bulat
       
 
        Maciek Palmowski
       
 
        Sébastien Chopin
       
 
        Daniel Roe
       
 
        Clément Ollivier
       
 
        Paiva
       
 
        Florian Reuschel
       
 
        Rishi Raj Jain
       
 
        Savas Vedova
       
 
        Steven Soekha
       
 
        Vinícius Alves
       
 
        Kareem Dabbeet
       
 
        Valentín Costa
       
 
        Ryan Skinner
       
 
        Alex Hirzel
       
 
        Ajeet Chaulagain
       
 
        René Eschke
       
 
        Nico Devs
       
 
        Muhammad
       
 
        Nazaré da Piedade
       
 
        Naoki Hamada
       
 
        Tom
       
 
        Yann Aufray
       
 
        Anthony Chu
       
 
        Nuzhat Minhaz
       
 
        Lucas Portet
       
 
        Richard Schloss
       
 
        bpy
       
 
        Antony Konstantinidis
       
 
        Hibariya
       
 
        Jose Seabra
       
 
        Eze
       
 
        Florian LEFEBVRE
       
 
        Lucas Recoaro
       
 
        Julien SEIXAS
       
 
        Hugo
       
 
        Sylvain Marroufin
       
 
        Spencer Cooley
       
 
        Piotr Zatorski
       
 
        Vladimir Semyonov
       
 
        Harry Allen
       
 
        kazuya kawaguchi
       
 
        Unai Mengual
       
 
        Hyunseung
       
 
        Alexandre Chopin
       
 
        pooya parsa
       
 
        Nick Medrano
       
 
        Mosaab Emam
       
 
        Ilja
       
 
        Heitor Ramon Ribeiro
       
 
        Nero
       
 
        Yoon Han