Created
December 27, 2017 13:25
-
-
Save MatthieuLemoine/adf5d3097d1ec37e45a567307772a6e3 to your computer and use it in GitHub Desktop.
Find repository dependencies in all your projects
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Usage : node find-repo-dependencies /path/to/projects/folder | |
const path = require('path'); | |
const fs = require('fs'); | |
const folder = path.resolve(process.argv[2]); | |
fs | |
.readdirSync(folder) | |
// Absolute path | |
.map(item => path.join(folder, item)) | |
// Folders only | |
.filter(item => fs.statSync(item).isDirectory()) | |
// Look for package.json | |
.map(item => path.join(item, 'package.json')) | |
.filter(fs.existsSync) | |
// Parse package.json | |
.map(item => JSON.parse(fs.readFileSync(item, 'utf8'))) | |
// Merge dependencies | |
.map(item => ({ | |
name: item.name, | |
dependencies: { | |
...(item.dependencies || {}), | |
...(item.devDependencies || {}), | |
}, | |
})) | |
// Find ssh/github/gitlab dependencies | |
.map(item => ({ | |
...item, | |
dependencies: Object.entries(item.dependencies) | |
.filter(entry => entry[1].includes('/')) | |
.map(entry => ({ name: entry[0], url: entry[1] })), | |
})) | |
// With at least one repository dependency | |
.filter(item => item.dependencies.length) | |
.forEach(item => | |
process.stdout.write( | |
`${item.name} :${item.dependencies.reduce( | |
(string, dependency) => | |
`${string}\t${dependency.name} : ${dependency.url}\n`, | |
'\n' | |
)}` | |
) | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment