Here’s the uncomfortable truth about modern JavaScript projects: they
rot faster than anything else we rescue. A Drupal 7 site from 2014
still runs today. A React app nobody has touched since 2023 frequently
won’t even build — npm install fails, the build tool errors, and the
site only exists because the last successful compile is still sitting
on the server.
Why JS ages in dog years
A typical React project depends on hundreds of packages, each depending on more, with the versions only loosely pinned. Node.js itself turns over on a schedule (a version enters end-of-life roughly every year), and build tooling has churned repeatedly — entire toolchains fashionable in 2019 are deprecated now. Every one of those is a clock, and an untouched project loses to all of them at once. A CMS ages like a cabin; a JS build ages like bread.
The insidious part: the deployed site keeps working. The rot is invisible until the day someone needs a small change and discovers nobody can produce a build anymore. That’s why this failure always arrives welded to an urgent request.
The triage order
1. Find the lockfile (package-lock.json or yarn.lock) — it
records the exact versions that last worked. Present: good odds.
Missing: expect archaeology. 2. Match the old Node version — most
“won’t compile” cases are a modern Node choking on an old toolchain,
and version managers make running 2023’s Node harmless. 3. Reproduce
the last successful build before changing anything. Get to “it builds
on my machine again,” then modernize — never both moves at once, for
the same reason you don’t re-pack the canoe in the middle of the rapids.
When to stop resuscitating
If the build only stands after heroics, ask what the app actually does. A surprising number of unbuildable React front ends are brochure sites that never needed to be applications at all — rebuilding those on something boring costs about the same as the resuscitation and removes the failure mode forever. A genuinely interactive app is worth reviving properly. Telling those two apart is an assessment question — and yes, “the developer left and it won’t compile” is a rescue we take.