Created
November 24, 2021 09:35
-
-
Save Drecu/a9578ca7d2b41da59adecbefecb4723e to your computer and use it in GitHub Desktop.
Update peer dependency script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* 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}!`); | |
| } | |
| }); |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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