Gli script di build sono bugiardi.
Sussurrano promesse di velocità — snapshot pre-costruiti per rendering fulminei — poi ti mollano in produzione. Prendete Remotion su Vercel. Noi — o meglio, certi developer con i fiocchi — lo usiamo per generare clip video server-side. L’idea geniale? Bundla una volta al deploy, snapshotta il sandbox, ripristina all’occorrenza. Niente cold start infernali. Ma la settimana scorsa, due bug hanno rovinato tutto. Fallimenti muti. Rendering a singhiozzo. Crash OOM in agguato. E nessuno ha fiatato per giorni.
Perché i Percorsi Relativi ci Hanno Tradito?
Attenzione. La CWD di Node non è tua amica. È una bestia volubile, che cambia con il vento — specie nel sandbox build di Vercel. Immaginate: il vostro script chiama addBundleToSandbox con bundleDir: '.remotion'. Carino. Relativo. Funziona in locale, dove comandate voi. CI? Di solito ok. Ma Vercel? A volte slitta. Cartella sbagliata. Upload vuoto. Snapshot? Un deserto.
Il bug: passavamo un percorso relativo: const BUNDLE_DIR = “.remotion”; // … await addBundleToSandbox({ sandbox, bundleDir: BUNDLE_DIR });
Ecco la pistola fumante. Dritta dal post-mortem. “Riesce” — zero errori — ma carica niente. I worker non ripristinano un bel niente. Torni al punto zero: re-bundle completo a ogni render. Leeeento.
La fix? Una riga di buon senso. Lega a __dirname. Stile ESM:
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const bundleDir = path.resolve(__dirname, ../${BUNDLE_DIR});
Pum. Percorso assoluto. Infrangibile. Lezione imparata dai primordi di Node — vi ricordate le guerre npm sui percorsi nel 2012? Shrinkwrap.json che divorava cartelle relative? La storia si ripete se la lasci fare. I dev di oggi ci cascano ancora. La CWD opaca di Vercel? Chiedetevelo.
Ma aspetta. Rispondi a quello, e zac — secondo bug.
Remotion Sa Gestire una Semplice Cartella Public?
No. Non proprio.
Il bundler di Remotion — tipo premuroso — copia la vostra cartella public/ nell’output. Font. Immagini. Asset per le composizioni. Logico, no? Peccato che l’API sandbox di Vercel? Fanatico della terra piatta. addBundleToSandbox si strozza sui percorsi nidificati. public/fonts/Inter.woff2? Errore. Niente mkdir ricorsivo. Vuole baby-steps: crea public/, poi public/fonts/, poi il file. Il bundler non ci sta.
Due soluzioni sul tavolo. Opzione A: publicDir: null in bundle(). Salta la copia. Ok se i vostri video non bramano asset statici. Opzione B: Bundla, poi rm -rf public/. Pulizia pre-upload.
Hanno scelto entrambe. Cintura, bretelle, paranoia.
Abbiamo fatto entrambe: publicDir: null nel bundle() più la rm difensiva come guardia cintura-e-bretelle.
Intelligente. A prova di futuro. Perché Remotion potrebbe cambiare i default domani. Chissà? I tool evolvono in modo strano.
La mia opinione calda: la doc di Remotion sorvola. “Bundle flat atteso.” Sepolto? Inesistente? Così pare. Ricorda i guai iniziali di Webpack con publicPath. I dev buttano via ore a reverse-engineerare. Previsione: se Remotion non patcha gli upload ricorsivi o avverte forte, ogni shop video su Vercel ci sbatte il muso. Il tuo clone Netflix? Condannato al purgatorio debug.
Soppressione Errori: L’Ammazza-Silenzio
Il peggio? I bug urlavano — piano piano.
Package.json aveva questa chicca:
“vercel-build”: “next build && node scripts/create-snapshot.mjs || echo ‘[create-snapshot] Skipped (non-fatal)’”
Utilissimo in staging. Token assente? Niente panico. Ma in prod? Degrado eterno. Build verdi. Worker zoppi. Rendering al ralenti. Giorni volano. Nessuno batte ciglio.
Fix: Strappalo via.
“vercel-build”: “next build && node scripts/create-snapshot.mjs”
Fallisci forte. Deploy muore. Il problema salta fuori. Ovvio ora, ma — ehi — il senno di poi è sempre 20/20.
Questo? Pura arroganza. “Non-fatale” un cavolo. Mi ricorda gli errori ingoiati da AWS Lambda ai primi tempi. Team che giravano funzioni “riuscìte” in ti