Open1

複数のcomposer.lockを比較してバージョンが変わったライブラリがわかるくん

meijinmeijin
const fs = require('fs');
const _ = require('lodash');

if (process.argv.length !== 4) {
    console.error('Usage: node compare.js <old-composer.lock> <new-composer.lock>');
    process.exit(1);
}

const oldLock = JSON.parse(fs.readFileSync(process.argv[2], 'utf-8'));
const newLock = JSON.parse(fs.readFileSync(process.argv[3], 'utf-8'));

const oldPackages = _.keyBy(oldLock.packages, 'name');
const newPackages = _.keyBy(newLock.packages, 'name');

let differences = [];

_.forEach(newPackages, (newPkg, pkgName) => {
    const oldPkg = oldPackages[pkgName];
    if (!oldPkg || oldPkg.version !== newPkg.version) {
        differences.push({
            name: pkgName,
            version: newPkg.version,
            oldVersion: oldPkg ? oldPkg.version : 'N/A'
        });
    }
});

console.table(differences);

実行イメージ

node compare.js old.lock new.lock
┌─────────┬─────────────────────────┬─────────┬────────────┐
│ (index) │          name           │ version │ oldVersion │
├─────────┼─────────────────────────┼─────────┼────────────┤
│    0'sentry/sentry''4.9.0''3.21.0'  │
│    1'sentry/sentry-laravel''4.8.0''3.3.2'   │
└─────────┴─────────────────────────┴─────────┴────────────┘