Build-Skripte lügen.
sie flüstern von Geschwindigkeit – vorgebaute Snapshots für Blitz-Renders – und lassen dich in der Produktion im Stich. Nehmt Remotion auf Vercel. Wir – oder genauer: ein paar schlaue Devs – nutzen es, um server-seitig Video-Clips zu spucken. Der Clou? Einmal bundlen beim Deploy, Sandbox snapshoten, bei Bedarf wiederherstellen. Kein Cold-Start-Horror. Aber letzte Woche haben zwei Bugs diesen Traum vergiftet. Stumme Fehlschläge. Langsame Renders. Lauernde OOM-Crashes. Und das tagelang unbemerkt.
Warum haben relative Pfade uns verraten?
Fakt ist: Nodes CWD ist kein Freund. Ein launisches Biest, das sich ständig ändert – vor allem in Vercels Build-Sandbox. Stellt euch vor: Euer Skript ruft addBundleToSandbox mit bundleDir: '.remotion' auf. Süß. Relativ. Läuft lokal, wo ihr der Directory-König seid. CI? Meistens okay. Vercel? Manchmal versagt es. Falscher Ordner. Leerer Upload. Snapshot? Leere Wüste.
Der Bug: Wir haben einen relativen Pfad übergeben: const BUNDLE_DIR = “.remotion”; // … await addBundleToSandbox({ sandbox, bundleDir: BUNDLE_DIR });
Das ist der Übeltäter. Direkt aus dem Post-Mortem. Es “klappt” – keine Errors – aber lädt nichts hoch. Worker stellen nichts wieder her. Zurück auf Los: Voll-Re-Bundle pro Render. Schneeeliiiimaa.
Fix? Eine Zeile Vernunft. An __dirname andocken. ESM-Style:
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const bundleDir = path.resolve(__dirname, ../${BUNDLE_DIR});
Zack. Absoluter Pfad. Unzerstörbar. Lektion aus Nodes Frühzeiten – erinnert ihr euch an die 2012 npm-Pfad-Kriege? Shrinkwrap.json fraß relative Dirs bei lebendigem Leib? Geschichte wiederholt sich, wenn man’s zulässt. Devs stolpern heute noch. Vercels undurchsichtiges CWD? Provokation.
Aber Moment. Fix das, und peng – zweiter Bug.
Schafft Remotion einen simplen Public-Ordner?
Nein. Eigentlich nicht.
Remotions Bundler – netter Kerl – kopiert euren public/-Ordner ins Output. Fonts. Bilder. Assets für Kompositionen. Logisch, oder? Aber Vercels Sandbox-API? Flat-Earth-Fanatiker. addBundleToSandbox erstickt an verschachtelten Pfaden. public/fonts/Inter.woff2? Error. Kein rekursives mkdir. Erwartet Babyschritte: public/ anlegen, dann public/fonts/, dann Datei. Bundler spielt nicht mit.
Zwei Fixes im Umlauf. Option A: publicDir: null in bundle(). Kopie überspringen. Gut, wenn eure Videos keine Statiks brauchen. Option B: Bundlen, dann rm -rf public/. Vor-Upload-Säuberung.
Wir haben beides genommen. Gürtel, Hosenträger, Paranoia.
Wir haben beides gemacht: publicDir: null in bundle() plus defensive rm als Gürtel-und-Hosenträger-Schutz.
Klug. Zukunftssicher. Denn Remotion könnte Defaults morgen umdrehen. Wer weiß? Tooling entwickelt sich schräg.
Mein Hot Take: Remotions Docs verschweigen das. “Flacher Bundle erwartet.” Vergraben? Fehlt? Fühlt sich so an. Echo von Webpacks frühen publicPath-Fallen. Devs verschwenden Stunden mit Reverse-Engineering. Prognose: Wenn Remotion keine rekursiven Uploads patched oder fett warnt, knallt jeder Vercel-Video-Shop dagegen. Euer Netflix-Klon? Verdammt zum Debug-Fegefeuer.
Fehlerunterdrückung: Der stille Mörder
Schlimmstes? Bugs haben geschrien – leise.
Package.json hatte diesen Knaller:
“vercel-build”: “next build && node scripts/create-snapshot.mjs || echo ‘[create-snapshot] Skipped (non-fatal)’”
Praktisch für Staging. Token fehlt? Kein Ding. Aber Prod? Ewiger Degradiert-Modus. Builds grün. Worker hinken. Renders kriechen. Tage vergehen. Keiner guckt hin.
Fix: Rausreißen.
“vercel-build”: “next build && node scripts/create-snapshot.mjs”
Laut scheitern. Deploy stirbt. Problem kommt hoch. Jetzt offensichtlich, aber – na ja – im Nachhinein ist man immer klüger.
Das? Reine Hybris. “Non-fatal” fein. Erinnert an AWS Lambdas frühe Error-Verschlucker. Teams rannten “erfolgreiche” Functions, die ewig timeten. Kostete sie Vermögen. Vercel-Ära, gleiche Falle. Staging-Hacks sickern