Saltar para o conteúdo
duxt

Bases de dados

Em que adaptadores de base de dados do Content um site duxt pode ser implementado, quais foram verificados e a única regra que mantém a camada fora do caminho.

O Content v3 guarda as suas páginas em SQL e sabe falar com cinco bases de dados. O duxt não tem opinião sobre nenhuma delas: o adaptador é uma decisão da tua implementação, o Content já é dono dessa superfície, e a única função da camada é não atrapalhar.

Esta página diz até onde isso foi de facto verificado, em vez de o insinuar.

Duas bases de dados, não uma

Quase todas as surpresas nesta área nascem de ler «a base de dados» como uma só coisa. O Content mantém duas, e têm tempos de vida e tipos diferentes.

content._localDatabasecontent.database
O que guardaA cache de análise — uma linha por ficheiro, tal como analisadoAs coleções que o site consulta
Quando existeDurante uma compilação, em .data/content/No servidor implementado
Que adaptadoressqlite ou d1, e mais nadaQualquer um dos cinco abaixo
Quem a lêduxt report, o validador de compilação, o mapa de redirecionamentosqueryCollection(), num pedido

A consequência é a parte útil: escolher um adaptador muda a base de dados implementada e mais nada. Um site implementado em PostgreSQL continua a compilar através de uma cache de análise SQLite local, porque o próprio tipo que o Content dá a essa cache não admite outra coisa.

Os adaptadores

content.database.type no teu próprio nuxt.config.ts. O duxt não o define para nenhum site; deixá-lo por definir dá-te o valor por omissão do Content.

AdaptadorPrecisa de instaladoduxt
sqlite (por omissão)Nada no Node 24 — lido pelo node:sqlite integradoVerificado em CI em cada commit
d1Nada; um binding da CloudflareVerificado — este site corre nele
libsql@libsql/clientVerificado em CI
postgresqlpgVerificado em CI
pglite@electric-sql/pglitePor testar

«Verificado em CI» significa uma compilação do próprio site deste repositório contra esse adaptador, seguida de uma sondagem de todos os pontos de acesso que leem a base de dados em tempo de execução e de uma execução do duxt report. O workflow é .github/workflows/adapters.yml; corre em cada pull request, para que as linhas acima não possam deixar de ser verdadeiras em silêncio.

Não é instalado nenhum controlador SQLite nativo

O valor por omissão do Content é o better-sqlite3, um addon nativo que compila através do node-gyp. O duxt define content.experimental.sqliteConnector como 'native', que usa em vez disso o node:sqlite integrado no Node 24 e não precisa de pacote nenhum — razão pela qual a instalação da camada não arrasta um compilador e pela qual a compilação quer o Node 24.

Herdas essa definição ao estender a camada e nunca deverias ver um aviso de descontinuação por causa dela. O que o Content descontinuou foi o antigo experimental.nativeSqlite; o duxt tem um teste que lê as próprias declarações do Content e faz falhar as verificações da camada assim que algo que ela define sob content.experimental traz uma etiqueta @deprecated — a próxima mudança de nome aterra neste repositório em vez de aterrar no teu registo de compilação.

O que corre durante a compilação, e nunca no servidor

Três partes da camada leem diretamente do sistema de ficheiros. As três correm dentro de uma compilação, que é precisamente o que torna possível um Worker — ou qualquer alvo sem disco.

O que fazQuando
content-cache.tsAbre a cache de análise com node:sqlite e põe-na em modo WALCompilação
modules/git-meta.tsCorre git log sobre a cópia de trabalho para «última atualização» e contribuidoresCompilação
duxt reportLê essa mesma cache a partir da linha de comandosAo lado da compilação

Nenhuma delas é alcançável a partir de um pedido, e nenhuma é afetada pelo teu adaptador: leem a cache SQLite local descrita acima, que existe diga o que disser content.database.

A regra

A camada nunca lê a base de dados do Content em tempo de execução por outra via que não queryCollection().

É nisto que consiste toda a compatibilidade de adaptadores do duxt. No momento em que uma rota de servidor abrisse a base de dados por si, a camada passaria a pressupor um sistema de ficheiros e um dialeto SQLite — e falharia na tua implementação, não nos testes deste repositório.

É imposta em vez de prometida: tests/content-database.test.ts falha se qualquer ficheiro sob server/ ou app/ importar um controlador de base de dados, e mantém fechada a lista de ficheiros de tempo de compilação que podem abrir um, pelo que um novo tem de ser justificado por escrito antes de entrar.

O que lê a base de dados num pedido

Tudo o resto que um site duxt serve já é um ficheiro quando é servido. Isto não é, e é isto que a matriz de adaptadores sonda:

  • …/page.md — a fonte Markdown por trás de «Ver como Markdown» e das ligações de entrega.
  • /mcp — todas as ferramentas, já que cada uma responde a partir de uma coleção.
  • /llms.txt e /llms-full.txt — ambos percorrem todas as coleções.
  • /rss.xml, assim que o configurares.

Uma página está igualmente nessa lista numa implementação renderizada no servidor, e fora dela numa pré-renderizada. Ver Implementar um site para saber qual das duas tens.

Esta página foi útil?