Skip to content

Instantly share code, notes, and snippets.

@techiev2
Last active May 2, 2024 20:10
Show Gist options
  • Save techiev2/9e726a73dba80045d465ef49bf36573a to your computer and use it in GitHub Desktop.
Save techiev2/9e726a73dba80045d465ef49bf36573a to your computer and use it in GitHub Desktop.
Helper script for lazy codebases that don't freeze package versions.
#!/usr/bin/node
const root = process.cwd()
const lockVersions = Object.fromEntries(Object.entries(require(`${root}/package-lock.json`).dependencies).map(([pkg, { version }]) => ([pkg, version])))
const { dependencies, devDependencies } = require(`${root}/package.json`)
const installedDependencies = Object.fromEntries(Object.entries(dependencies || {}).map(([pkg, looseVersion]) => {
return [pkg, { version: looseVersion, installed: lockVersions[pkg] }]
}).filter(([_, { version, installed }]) => {
version = version.startsWith('^') ? version.split('^')[1] : version
return version !== installed
}))
const installedDevDependencies = Object.fromEntries(Object.entries(devDependencies || {}).map(([pkg, looseVersion]) => {
return [pkg, { version: looseVersion, installed: lockVersions[pkg] }]
}).filter(([_, { version, installed }]) => {
version = version.startsWith('^') ? version.split('^')[1] : version
return version !== installed
}))
console.log(JSON.stringify({
installedDependencies,
installedDevDependencies
}, null, 1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment