Skip to content

Pastas Globais vs Pastas de Módulos

Na estrutura modular de um projeto Vue, a diferenciação entre pastas globais e pastas específicas dos módulos é crucial para manter a organização e a escalabilidade do projeto. Aqui está uma explicação detalhada sobre a diferença entre esses dois tipos de pastas:

Pastas Globais

As pastas na raiz do diretório src que não estão dentro da pasta modules são consideradas globais. Essas pastas contêm recursos, componentes, e funcionalidades que são utilizados em toda a aplicação. Vamos detalhar cada uma:

  1. @types/:

    • Descrição: Contém declarações de tipos globais em TypeScript.
    • Uso: Define tipos que são utilizados em várias partes do projeto para garantir a tipagem correta e evitar erros de compilação.
  2. assets/:

    • Descrição: Armazena recursos estáticos como imagens, fontes e arquivos de mídia.
    • Uso: Disponibiliza esses recursos para serem utilizados por qualquer parte da aplicação, incluindo componentes globais e específicos de módulos.
  3. components/:

    • Descrição: Contém componentes Vue que são globais e podem ser utilizados em toda a aplicação.
    • Uso: Componentes reutilizáveis que não são específicos a nenhum módulo, como botões, modais e outros elementos UI comuns.
  4. composables/:

    • Descrição: Armazena funções de composição (composables) que encapsulam lógica reutilizável.
    • Uso: Funções que podem ser usadas por qualquer componente ou módulo para adicionar funcionalidades como gerenciamento de permissões ou internacionalização.
  5. helpers/:

    • Descrição: Contém funções auxiliares que fornecem utilitários comuns.
    • Uso: Utilitários que ajudam na implementação de funcionalidades comuns e podem ser usados globalmente, como a função register-modules.ts.
  6. mirage/:

    • Descrição: Configurações para o Mirage JS, utilizado para simular APIs durante o desenvolvimento.
    • Uso: Ajuda a testar funcionalidades sem depender de uma API backend real.
  7. plugins/:

    • Descrição: Plugins Vue que adicionam funcionalidades globais à aplicação.
    • Uso: Configurações e inicializações de plugins como internacionalização (i18n), modo de cor, controle de permissões, e PrimeVue.
  8. router/:

    • Descrição: Configuração principal de rotas da aplicação.
    • Uso: Define as rotas globais que podem ser acessadas de qualquer lugar na aplicação.
  9. services/:

    • Descrição: Contém serviços para chamadas de APIs e outras funcionalidades de backend.
    • Uso: Serviços que podem ser usados globalmente para comunicação com servidores externos.
  10. stores/:

    • Descrição: Configuração de estado global usando Pinia.
    • Uso: Stores que mantêm o estado global da aplicação, compartilhado entre diferentes partes da aplicação.
  11. utils/:

    • Descrição: Funções utilitárias globais.
    • Uso: Utilitários que podem ser usados em qualquer parte da aplicação, como funções para modo escuro ou termos de internacionalização.
  12. views/:

    • Descrição: Views globais da aplicação.
    • Uso: Componentes de view que são usados globalmente, como o componente principal App.vue.

Pastas de Módulos

As pastas dentro do diretório modules são específicas para funcionalidades ou áreas distintas da aplicação. Cada módulo é autônomo e encapsula seus próprios componentes, funções de composição, serviços, stores de estado, utilitários e Views. Vamos detalhar a estrutura de um módulo:

  1. components/:

    • Descrição: Componentes específicos para o módulo.
    • Uso: Componentes que são utilizados apenas dentro do contexto do módulo, como BaseComponentA, TheComponentA, e TheComponentB.
  2. composables/:

    • Descrição: Funções de composição específicas do módulo.
    • Uso: Funções reutilizáveis que encapsulam lógica específica ao módulo.
  3. services/:

    • Descrição: Serviços específicos do módulo.
    • Uso: Funções de serviço que realizam chamadas de API ou outras operações específicas ao módulo.
  4. stores/:

    • Descrição: Stores de estado específico do módulo.
    • Uso: Gerenciamento de estado que é necessário apenas dentro do módulo, como storeA.ts e storeB.ts.
  5. utils/:

    • Descrição: Utilitários específicos do módulo.
    • Uso: Funções utilitárias que são usadas somente dentro do módulo.
  6. views/:

    • Descrição: Views específicas do módulo.
    • Uso: Componentes de view que são exclusivos ao módulo, como viewHome.vue.
  7. index.ts:

    • Descrição: Ponto de entrada do módulo.
    • Uso: Exporta e inicializa funcionalidades do módulo.
  8. moduleA.vue:

    • Descrição: Componente principal do módulo.
    • Uso: Pode servir como ponto central de montagem para o módulo.
  9. router.ts:

    • Descrição: Configuração de rotas específicas do módulo.
    • Uso: Define as rotas que pertencem ao módulo, integrando-se com o roteamento global da aplicação.

Diferenças Principais

  • Escopo de Utilização:

    • Globais: Utilizados em toda a aplicação, acessíveis por qualquer componente ou módulo.
    • Módulos: Restringidos ao escopo do próprio módulo, não são diretamente acessíveis fora dele.
  • Reutilização:

    • Globais: Projetados para serem reutilizáveis em diferentes contextos e módulos.
    • Módulos: Específicos para o contexto e lógica do módulo, reutilizados apenas dentro do próprio módulo.
  • Manutenção e Isolamento:

    • Globais: Alterações podem impactar múltiplas partes da aplicação.
    • Módulos: Alterações são isoladas, impactando apenas o próprio módulo, facilitando a manutenção.

Conclusão

A distinção clara entre pastas globais e pastas de módulos em um projeto Vue promove a organização e a escalabilidade do projeto. Enquanto as pastas globais fornecem recursos e funcionalidades que podem ser utilizados em toda a aplicação, as pastas de módulos encapsulam funcionalidades específicas, permitindo um desenvolvimento modular e colaborativo eficiente.