🎉 hey, I shipped skillcraft.ai — it shows you which dev skills are in demand

Thought you might find it useful. See what's trending, what's fading, and which skills are getting people hired.

Published
4 min read

dependency-time-machine: An Easier Way to Update NPM packages

Automatically update your package.json dependencies one by one in chronological order, ensuring compatibility and reducing errors

Updating Node dependencies is a headache. Things often break, or dependencies conflict because they’ve been updated at different times. It’s frustrating when you run into issues after an update, especially when you don’t know which package caused the problem.

Managing dependencies manually is time-consuming, and figuring out the right order to update them in is tricky. One outdated dependency can throw off your entire project, and fixing it can feel like you’re playing whack-a-mole with bugs.

I came across a handy package called dependency-time-machine (thanks pilotpirxie). It streamlines the process by updating your dependencies one at a time in the order they were released, making sure everything remains compatible and works together seamlessly.

How dependency-time-machine works

  • Reads your package.json
  • Finds the release dates for each dependency.
  • Updates them one by one, in the order they were released.
  • Runs your tests after each update to check for compatibility issues.

dependency-time-machine diagram

Usage

Run dependency-time-machine with npx to find the next recommended dependency to update.

Terminal window
➜ npx dependency-time-machine --update --install
Need to install the following packages:
Ok to proceed? (y) y
Fetching remote dependencies...
[1/8] apollo-server-hapi
[2/8] graphql
[3/8] hapi
[4/8] hapi-swagger
[5/8] inert
[6/8] mongoose
[7/8] nodemon
[8/8] vision
New version found: [email protected] (2018-05-21T17:59:05.432Z)
Updating [email protected] in /Users/trevorindreklasn/Projects/labs/graphql-nodejs-hapi-api/package.json...
Installing new version...
npm warn deprecated [email protected]: This version contains severe security issues and defects and should not be used! Please upgrade to the latest version of @hapi/hapi or consider a commercial license (https://github.com/hapijs/hapi/issues/4114)
Installed

dependency-time-machine finds that hapi has a new version (17.5.0) released on May 21, 2018. It updates hapi in the package.json, installs the new version, and issues a warning that this version has known security defects and should be updated to a more secure version.

Terminal window
➜ graphql-nodejs-hapi-api git:(master) ✗ npx dependency-time-machine --update --install
Fetching remote dependencies...
[1/8] apollo-server-hapi
[2/8] graphql
[3/8] hapi
[4/8] hapi-swagger
[5/8] inert
[6/8] mongoose
[7/8] nodemon
[8/8] vision
New version found: [email protected] (2018-05-21T20:19:18.763Z)
Updating [email protected] in /Users/trevorindreklasn/Projects/labs/graphql-nodejs-hapi-api/package.json...
Installing new version...
Installed

Skipping Major Versions

Use the --stop-if-higher-major-number flag to skip over major versions. This will prevent the tool from updating to the next major version and instead keep it within the current major version range, ensuring more stable updates. Here’s an example:

Terminal window
➜ graphql-nodejs-hapi-api git:(master) ✗ npx dependency-time-machine --update --install --stop-if-higher-major-number
Fetching remote dependencies...
[1/7] apollo-server-hapi
[2/7] graphql
[3/7] hapi
[4/7] hapi-swagger
[5/7] inert
[6/7] mongoose
[7/7] vision
New version found: [email protected] (2018-07-30T23:51:37.527Z)
Updating [email protected] in /Users/trevorindreklasn/Projects/labs/graphql-nodejs-hapi-api/package.json...
Installing new version...
npm warn deprecated [email protected]: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated [email protected]: Rimraf versions prior to v4 are no longer supported
npm warn deprecated [email protected]: Glob versions prior to v9 are no longer supported
npm warn deprecated [email protected]: CircularJSON is in maintenance only, flatted is its successor.
Installed

In this case, we updated to [email protected], staying within the same major version (5.x.x), skipping any updates that would have moved to a higher major version (like 6.x.x or higher). This helps keep updates stable and avoids breaking changes from major version bumps.

Excluding Dependencies

To skip certain dependencies from being updated, use the -e flag:

Terminal window
➜ graphql-nodejs-hapi-api git:(master) ✗ npx dependency-time-machine --update --install -e hapi
Fetching remote dependencies...
[1/8] apollo-server-hapi
[2/8] graphql
[3/8] hapi (excluded)
[4/8] hapi-swagger
[5/8] inert
[6/8] mongoose
[7/8] nodemon
[8/8] vision
New version found: [email protected] (2018-06-08T13:26:01.447Z)
Updating [email protected] in /Users/trevorindreklasn/Projects/labs/graphql-nodejs-hapi-api/package.json...
Installing new version...
npm warn deprecated [email protected]: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
Installed

Hapi was excluded from the update process:

Terminal window
[3/8] hapi (excluded)

What about private registries? Not a problem.

Use the -r flag to specify your own private registry URL. Replace the example URL with your own.

Terminal window
➜ graphql-nodejs-hapi-api git:(master) ✗ npx dependency-time-machine --timeline -r https://npm.mycompany.com
Fetching remote dependencies...
[1/8] apollo-server-hapi
Error fetching data https://npm.mycompany.com/apollo-server-hapi
Error: getaddrinfo ENOTFOUND npm.mycompany.com
at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:120:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'npm.mycompany.com'
}

Sources


Found this article helpful? You might enjoy my free newsletter. I share dev tips and insights to help you grow your coding skills and advance your tech career.


Check out these related articles that might be useful for you. They cover similar topics and provide additional insights.

Webdev
12 min read

Robust Data Fetching Architecture For Complex React/Next.js Apps

How I use the 'Three Layers of Data' architecture pattern for React and Next.js apps to avoid common pitfalls, tech debt, and improve performance

May 4, 2025
Read article
Webdev
13 min read

10 Essential Terminal Commands Every Developer Should Know

List of useful Unix terminal commands to boost your productivity. Here are some of my favorites.

Aug 21, 2024
Read article
Webdev
4 min read

Open Dyslexic Font: Improve Your Web Accessibility

How to implement the Open-Dyslexic font to enhance readability for users with dyslexia

Oct 12, 2024
Read article
Webdev
5 min read

WebAssembly (Wasm): When (and When Not) to Use It

Understanding the real use cases for WebAssembly beyond the performance hype

Nov 25, 2024
Read article
Webdev
3 min read

Form Validation That Doesn't Annoy Users: CSS :user-valid and :user-invalid

The new pseudo-classes :user-valid and :user-invalid give us a smarter way to style form validation states based on user interaction

Dec 12, 2024
Read article
Webdev
7 min read

How to Land Your First Tech Job

A developer's guide to tech interviews - from someone who sits on both sides of the table

Oct 24, 2024
Read article
Webdev
4 min read

The What, Why, and How of Using a Skeleton Loading Screen

Skeleton loading screens enhance user experience and make your app feel faster

Nov 12, 2020
Read article
Webdev
3 min read

CSS ::target-text for Text Highlighting

A look at how browsers can highlight text fragments using CSS ::target-text, making text sharing and navigation more user-friendly

Dec 17, 2024
Read article
Webdev
5 min read

SecretLint — A Linter for Preventing Committing Credentials

A guide to catching and preventing credential leaks in your code using Secretlint

Oct 22, 2024
Read article

This article was originally published on https://www.trevorlasn.com/blog/dependency-time-machine. It was written by a human and polished using grammar tools for clarity.