Estrutura do projeto e stack técnica

Pré-requisitos

Antes de ler esta página, certifique-se de que você já colocou o seu primeiro Portal no ar seguindo o Início rápido do AI Portal.

A maior parte do desenvolvimento diário pode ficar por conta da IA. Ainda assim, conhecer a estrutura do template permite saber se a IA colocou o código no lugar certo e facilita localizar problemas.

Stack técnica

O template de Portal é baseado em @nocobase/portal-template-default, com código-fonte em nocobase/portal-template-default.

TecnologiaFinalidade
React 19 + TypeScriptFramework de frontend
ViteServidor de desenvolvimento e ferramenta de build
RefineFramework da camada de dados, cuidando de recursos, rotas, formulários e permissões
Tailwind CSS 4Estilos
shadcn/uiBase de componentes, com o código-fonte pertencendo ao projeto
lucideBiblioteca de ícones
pnpmGerenciador de pacotes

Essa combinação é a stack de frontend que a IA melhor conhece hoje, o que torna mais preciso o que ela escreve.

O Portal é por enquanto um projeto puramente de frontend, com a lógica de negócio resolvida pela API do NocoBase, pelos componentes padrão e assim por diante. O suporte para o AI Agent também escrever o backend do Portal está a caminho.

Estrutura de diretórios

src/
├── app/            Rotas e carregamento de extensões
├── pages/          Login, cadastro, esqueci a senha e afins
├── components/     Componentes
│   ├── ui/         Base de componentes shadcn/ui
│   ├── app-shell/  Layout, navegação, estados de carregamento
│   ├── auth/       Componentes de autenticação
│   └── ...
├── extensions/     Extensões, ativas assim que instaladas
├── lib/            Wrapper do cliente NocoBase e lógica de ACL
├── providers/      Providers do Refine
├── hooks/          Hooks customizados
└── locales/        Textos localizados

Alguns pontos importantes:

  • src/app/routes.tsx — Estrutura de rotas. As rotas autenticadas e não autenticadas ficam separadas, e as rotas fornecidas por extensões são montadas automaticamente
  • src/app/extensions.tsx — Carregamento de extensões, usando import.meta.glob para varrer src/extensions/*/extension.tsx
  • src/providers/data.ts — O data provider do Refine, que traduz a sintaxe de consulta do Refine em parâmetros da API do NocoBase
  • src/lib/nocobase/client.tsNocoBaseClient, o wrapper de baixo nível por trás de toda requisição
  • src/components/ui/ — Mais de 60 componentes shadcn/ui, prontos para uso

As páginas de negócio normalmente ficam em src/extensions/, um diretório por módulo funcional. Veja Componentes padrão e extensões.

Arquivos importantes

ArquivoFinalidade
AGENTS.mdConvenções de desenvolvimento para o AI Agent. Você pode adicionar aqui as regras do seu projeto
components.jsonConfiguração do shadcn/ui, incluindo estilo, biblioteca de ícones e aliases de caminho
.env / .env.localVariáveis de ambiente, atualizadas automaticamente por nb portal dev e deploy
vite.config.tsConfiguração de build, incluindo o proxy da API usado durante o desenvolvimento

Variáveis de ambiente

VariávelDescrição
NOCOBASE_API_URLRaiz da REST API do NocoBase, precisa terminar com /api. Normalmente /api em deploys de mesma origem
NOCOBASE_PORTAL_BASECaminho público em que o Portal está montado. / no desenvolvimento local, o caminho real de deploy como /x/main/ nos builds
NOCOBASE_AUTHENTICATORNome do autenticador, basic por padrão
NOCOBASE_API_TOKENToken temporário para desenvolvimento. Não faça commit de um valor real
API_CLIENT_STORAGE_PREFIXPrefixo de armazenamento do token. Mantenha alinhado se o servidor tiver customizado
API_CLIENT_STORAGE_TYPEForma de armazenamento do token, localStorage por padrão
API_CLIENT_SHARE_TOKENSe o token é compartilhado, false por padrão

O nb portal dev e o nb portal deploy escrevem essas variáveis para você, então normalmente não é preciso mexer nelas. As três últimas só precisam ser alinhadas quando o servidor customizou a forma de armazenar os tokens de autenticação.

Durante o desenvolvimento, se NOCOBASE_API_URL for um endereço absoluto, o Vite monta um proxy para encaminhar as requisições, então você não precisa lidar com CORS.

Comandos mais usados

São estes os comandos do dia a dia. Instalação de dependências, atualização das variáveis de ambiente e builds ficam todos por conta da CLI nos bastidores:

ComandoFinalidade
nb portal listVer quais Portals a aplicação atual tem
nb portal info <portal>Consultar o caminho de desenvolvimento, o caminho de deploy e a URL de acesso de um Portal
nb portal create <portal>Criar o workspace de desenvolvimento de um Portal novo a partir do template
nb portal pull <portal>Baixar o código-fonte remoto do Portal para o workspace de desenvolvimento local
nb portal dev <portal>Iniciar o servidor de desenvolvimento local e ver as alterações ao vivo
nb portal push <portal>Enviar as alterações locais do código-fonte para o remoto
nb portal deploy <portal>Compilar e fazer o deploy, tornando as alterações visíveis para os usuários
nb portal config <portal>Ajustar o source storage, as configurações de Git e o caminho do workspace de desenvolvimento
nb portal destroy <portal>Excluir o registro do Portal e os arquivos implantados

Para os parâmetros completos de cada comando, veja a Referência do comando nb portal.

Onde fica o workspace de desenvolvimento

O workspace de desenvolvimento de um Portal vai para o diretório em que você estava quando executou nb portal create ou nb portal pull:

./<portal>

Você pode apontar para outro lugar com --path na criação ou no pull. Os artefatos de deploy compilados vão para outro lugar — sob o storage da aplicação de destino, mantidos em sincronia pelo nb portal deploy, e não são algo com que você lide normalmente.

Se você não tem certeza de onde fica o workspace de desenvolvimento de um Portal, basta consultar:

nb portal info main