dependency-smell-reporter
Version:
A CLI tool that detects unused, outdated, and missing dependencies with reporting.
60 lines (50 loc) • 1.81 kB
JavaScript
const depcheck = require("depcheck");
const ncu = require("npm-check-updates");
const path = require("path");
const ffs = require("fast-folder-size");
async function getFolderSizeInMB(folderPath) {
return new Promise((resolve, reject) => {
ffs(folderPath, (err, bytes) => {
if (err) {
console.error("❌ Error getting folder size:", err.message);
return reject(err);
}
const mb = (bytes / 1024 / 1024).toFixed(2);
console.log("📦 node_modules size (MB):", mb);
resolve(mb);
});
});
}
async function analyzeDependencies(projectPath) {
console.log("📁 Starting analyzeDependencies()...");
try {
console.log("🔍 Running depcheck...");
const options = {
ignoreDirs: ["dist", "build", "coverage"],
ignoreMatches: ["eslint", "prettier"],
};
const depResult = await depcheck(projectPath, options);
console.log("✅ depcheck done:", depResult);
console.log("🔍 Running npm-check-updates...");
const outdated = await ncu.run({
packageFile: path.join(projectPath, "package.json"),
});
console.log("✅ outdated done:", outdated);
const nodeModulesSize = await getFolderSizeInMB(
path.join(projectPath, "node_modules")
);
const result = {
unused: depResult.dependencies,
missing: Object.keys(depResult.missing || {}),
outdated: Object.keys(outdated),
largeNodeModules: nodeModulesSize,
usingTooMany: depResult.using ? Object.keys(depResult.using).length : 0,
};
console.log("✅ Final report:", result);
return result;
} catch (err) {
console.error("❌ analyzeDependencies() failed:", err.message);
throw err;
}
}
module.exports = { analyzeDependencies };