UNPKG

npm-compare-resolved

Version:

Compares packages versions in package.json to resolved versions in package-lock.json

61 lines (49 loc) 1.69 kB
#!/usr/bin/env node const red = '\x1b[31m'; const reset = '\x1b[0m'; const fs = require('fs'); const path = require('path'); const packageJsonPath = process.argv[2] || path.join(process.cwd(), 'package.json'); const packageLockJsonPath = process.argv[3] || path.join(process.cwd(), 'package-lock.json'); if (!fs.existsSync(packageJsonPath)) { console.error(red + 'There is no package.json in ' + packageJsonPath + reset); process.exit(); } if (!fs.existsSync(packageLockJsonPath)) { console.error( red + 'There is no package-lock.json in ' + packageLockJsonPath + reset, ); process.exit(); } const packageJson = JSON.parse(fs.readFileSync(packageJsonPath)); const packageLockJson = JSON.parse(fs.readFileSync(packageLockJsonPath)); const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies, }; console.log( 'Package Name\t\t\t\t\t\tVersion in package.json\t\tActual Resolved Version', ); console.log( '-----------------------------------------------------------------------------------------------------------', ); for (const packageName in dependencies) { const packageVersion = dependencies[packageName]; const resolvedVersion = packageLockJson.dependencies[packageName].version; const same = packageVersion.replace(/^[~\^]/, '') === resolvedVersion; if (same) { console.log( `${packageName.padEnd(60)}${packageVersion.padEnd( 20, )}${resolvedVersion.padEnd(5)}`, ); } else { console.log( `${red}${packageName.padEnd(60)}${packageVersion.padEnd( 20, )}${resolvedVersion.padEnd(5)}${reset}`, ); } }