UNPKG

dependency-smell-reporter

Version:

A CLI tool that detects unused, outdated, and missing dependencies with reporting.

60 lines (50 loc) 1.81 kB
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 };