Skip to content
FMField noteAugust 10, 2026

When a React app won't compile anymore

#platforms#rescue#evergreen

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 buildnpm 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.