Astro 5 Glob Loader Bug in Monorepos
Ujenzi (build) wako wa Astro umefaulu. Hakuna makosa. Hakuna onyo. Lakini maudhui yako hayapo.
Hivi karibuni nilikumbana na tatizo hili kwenye pnpm monorepo. Nilikuwa nikitumia Astro 5 content collections kuongeza maoni ya uhariri (editorial takes) kwenye kurasa zangu. Kienyeji (locally), kila kitu kilifanya kazi vizuri. Katika mfumo wangu wa CI, kurasa zilijengwa zikiwa na maudhui tupu.
Tatizo ni jinsi glob loader inavyotatua (resolves) njia (paths).
The Issue
Astro glob loader hutatua njia za msingi zinazotegemea mahali (relative base paths) kutoka kwenye process.cwd(). Haitumii eneo la faili lako la usanidi (config file).
Katika monorepo, CI yako mara nyingi huendesha ujenzi (build) kutoka kwenye mzizi wa workspace (workspace root). Kienyeji, huenda unaendesha ujenzi kutoka kwenye directory ya programu (app directory).
- Local:
cwdniapps/oss-alternatives. Njia./contentinafanya kazi. - CI:
cwdni mzizi wa ghala (repository root). Njia./contenthaipo.
Astro haitoi kosa (error) inapopata kuwa hakuna faili. Inarudisha tu mkusanyiko (collection) mtupu. Unatuma tovuti yenye data iliyopotea na hujui kamwe.
The Fix
Acha kutumia maandishi ya kulinganisha (relative strings) kwa njia. Tumia import.meta.url ili kuunganisha njia zako kwenye faili la usanidi badala ya directory inayofanya kazi.
Tumia mfumo huu:
import { fileURLToPath } from "node:url";
const TAKES_DIR = fileURLToPath( new URL("./content/per-alternative-takes", import.meta.url) );
Hii inahakikisha kuwa njia ni sahihi kila wakati, bila kujali wapi unaendesha ujenzi.
Avoid ID Collisions
Glob loader hutumia uwanja wa slug kwenye frontmatter yako kama ID kwa kawaida. Ikiwa mtumiaji ataongeza uwanja wa slug, inaweza kuharibu utafutaji wa data yako. Tumia generateId ili kulazimisha jina la faili liwe ID rasmi.
Lessons for Monorepo Developers
- End
