Get it working on the version it was built for first, using a version manager such as nvm, so you have a working starting point. Then upgrade it one long-term-support release at a time, testing at each step, until it's on a supported version. Don't run it in production on the old one: Node.js says production apps should only use Active or Maintenance LTS releases, and Node 20 and everything older have reached end of life.
What's the problem
The app only installs or starts on an old Node version, maybe Node 12, 14 or 16. Your computer and your hosting have moved on. You can't run it, can't deploy it, and every upgrade attempt breaks something.
Why it happens
- Node changes, and old code depended on old behaviour. Removed features, changed defaults and newer language rules break older code and older packages.
- Packages are tied to Node versions. Old packages with compiled parts often won't build on new Node, and new packages often won't run on old Node.
- Old versions stop getting fixes. Long-term-support releases get critical fixes for about 30 months. After end of life there are no more security fixes, which is why hosts eventually stop supporting them.
How to fix it
- Find the version it was built for. Check
.nvmrc,.node-version, theenginesfield inpackage.json, theDockerfile(FROM node:…) and the build settings. - Install a version manager (nvm on Mac and Linux, nvm-windows on Windows), install that old version, and get the app running on it. This is your baseline.
- Write the version into an
.nvmrcfile, so everyone, and every host, uses the same one. - Upgrade one LTS release at a time, for example 16 to 18, 18 to 20, 20 to 22, 22 to 24. At each step, reinstall, run it, fix what breaks, and update the packages that complain.
- Stop on a supported LTS release and update
.nvmrcand your hosting's Node setting to match. - Test the flows that matter after the final step, not just that it starts.
When to call Preventionlabs
If the version manager gets it running and each upgrade step is a handful of fixes, you can do this. Call us when the project is many versions behind, the packages it needs no longer exist for newer Node, and every step breaks more than it fixes. The first thing a resurrection delivers is an app that builds and starts on maintained dependencies, deployed in your own hosting account.
Submit your project for a free assessmentFree assessment. $10,000 AUD flat to get it live, only if we take it on and you go ahead.
Sources
- Node.js: Node.js Releasesofficial docs
Production applications should only use Active LTS or Maintenance LTS releases.
- Node.js: Node.js Releasesofficial docs
LTS release status is "long-term support", which typically guarantees that critical bugs will be fixed for a total of 30 months.
- Node.js: Node.js Releases: release tableofficial docs
v 20 Iron Apr 17, 2023 Mar 24, 2026 EOL
- Netlify: Manage build dependencieshosting platform docs
Add a .node-version or .nvmrc file to the site’s base directory in your repository.