Skip to content

Instantly share code, notes, and snippets.

@Drecu
Created November 24, 2021 09:35
Show Gist options
  • Select an option

  • Save Drecu/a9578ca7d2b41da59adecbefecb4723e to your computer and use it in GitHub Desktop.

Select an option

Save Drecu/a9578ca7d2b41da59adecbefecb4723e to your computer and use it in GitHub Desktop.
Update peer dependency script
/* eslint-disable @typescript-eslint/no-var-requires */
// this script checks the provided peer dependencies (provided as arguments) if they need to be updated, since npm i doesn't up your
// peer dependency versions (this is by design...)
// USAGE: node scripts/update-peer-deps.js peerDep1 peerDep2 andSoOn3
// you might need to update your path to your package.json
const fs = require("fs");
const { execSync } = require("child_process");
const pkgJson = require("../package.json"); // update me if necessary
var pathArgs = process.argv.slice(2); // get rid of the "npm run" words when invoking the script
if (pathArgs.length < 1) {
return console.warn("Please provide a peer dependency as an argument which you want to update");
}
pathArgs.forEach((peerDepToUpdate) => {
peerDepToUpdate = peerDepToUpdate.trim();
const peerDeps = pkgJson.peerDependencies;
const devDeps = pkgJson.devDependencies;
const deps = pkgJson.dependencies;
let dep_core, dev_dep_core, peer_dep_core; // version info for dependency, development dependency and peer dependency
try {
dep_core = deps[peerDepToUpdate].replace("^", "");
} catch {
dep_core = null;
}
try {
dev_dep_core = devDeps[peerDepToUpdate].replace("^", "");
} catch {
dev_dep_core = null;
}
try {
peer_dep_core = peerDeps[peerDepToUpdate].replace("^", "");
} catch {
peer_dep_core = null;
}
// get latest version of your dependency from the registry
const latest_version = execSync(`npm view ${peerDepToUpdate} version`, { encoding: "utf-8" }).trim(); // returns sth like 0.3.2
console.log("-------------------------------------------------------");
console.log(`check if we need to update our peer dependency for ${peerDepToUpdate}`);
console.log("current dependency version: " + dep_core);
console.log("current development dependency version: " + dev_dep_core);
console.log("current peer dependency version: " + peer_dep_core);
console.log("latest version: " + latest_version);
const depToCompare = dep_core ? dep_core : dev_dep_core; // prio for dependency over dev dependency
const isPeerNotEqualToDep = depToCompare != peer_dep_core;
const isPeerNotEqualToLatest = latest_version != peer_dep_core;
const onlyUpdateWhenPeerDepIsDifferent = isPeerNotEqualToDep && isPeerNotEqualToLatest;
if (onlyUpdateWhenPeerDepIsDifferent) {
pkgJson.peerDependencies[peerDepToUpdate] = "^" + latest_version;
fs.writeFileSync("package.json", JSON.stringify(pkgJson, null, 2)); // save new package.json
console.log(`Updated package with latest ${peerDepToUpdate} version: ` + latest_version);
} else {
console.log(`Same version, no need to adapt peer dependency version for ${peerDepToUpdate}!`);
}
});
@Drecu
Copy link
Author

Drecu commented Nov 24, 2021

I created this script since i needed a way to update the peer dependency versions automatically in several GitLab pipelines.

Use like that: node scripts/update-peer-deps.js peerDep1 peerDep2 andSoOn3
Dependencies seperated by space

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment