npm-compare-resolved
Version:
Compares packages versions in package.json to resolved versions in package-lock.json
61 lines (49 loc) • 1.69 kB
JavaScript
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}`,
);
}
}