Astro 5 Glob Loader-bug in monorepo's

Je Astro-build is geslaagd. Nul fouten. Nul waarschuwingen. Maar je content ontbreekt.

Ik kwam dit probleem onlangs tegen in een pnpm-monorepo. Ik gebruikte Astro 5 content collections om redactionele toevoegingen aan mijn pagina's toe te voegen. Lokaal werkte alles perfect. In mijn CI-pipeline werden de pagina's echter gerenderd met lege content.

Het probleem is hoe de glob loader paden oplost.

Het probleem

De Astro glob loader lost relatieve basispaden op vanaf process.cwd(). Hij gebruikt niet de locatie van je configuratiebestand.

In een monorepo voert je CI de build vaak uit vanaf de root van de workspace. Lokaal voer je de build waarschijnlijk uit vanuit de app-directory.

  • Lokaal: cwd is apps/oss-alternatives. Pad ./content werkt.
  • CI: cwd is de repository-root. Pad ./content bestaat niet.

Astro geeft geen foutmelding als er geen bestanden worden gevonden. Het geeft simpelweg een lege collectie terug. Je publiceert een site met ontbrekende gegevens zonder dat je het doorhebt.

De oplossing

Stop met het gebruik van relatieve strings voor paden. Gebruik import.meta.url om je paden te koppelen aan het configuratiebestand in plaats van aan de werkmap.

Gebruik dit patroon:

import { fileURLToPath } from "node:url";

const TAKES_DIR = fileURLToPath(
  new URL("./content/per-alternative-takes", import.meta.url)
);

Dit zorgt ervoor dat het pad altijd correct is, ongeacht waar je de build uitvoert.

Voorkom ID-botsingen

De glob loader gebruikt standaard het slug-veld in je frontmatter als de ID. Als een gebruiker een slug-veld toevoegt, kan dit je gegevensopzoekingen verstoren. Gebruik generateId om de bestandsnaam als de leidende ID af te dwingen.

Lessen voor monorepo-ontwikkelaars

  • Voer lokaal smoke tests uit vanaf de root van de workspace. Als je alleen vanuit de app-map test, mis je pad-bugs.
  • Voeg health checks voor collecties toe. Gooi in je dev-omgeving een foutmelding als een kritieke collectie nul items teruggeeft.
  • Gebruik absolute padresolutie voor elke bestandverwijzing in je configuratiebestanden.
  • Voeg een post-deploy check toe om te verifiëren of belangrijke content aanwezig is in de live HTML.

Vertrouw nooit op stilte. Een geslaagde build betekent niet altijd een geslaagde deployment.

Source: https://dev.to/morinaga/what-i-learned-about-astro-5-glob-loader-path-resolution-in-a-pnpm-monorepo-2ed4