Skip to content

Instantly share code, notes, and snippets.

@MatthieuLemoine
Created December 27, 2017 13:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MatthieuLemoine/adf5d3097d1ec37e45a567307772a6e3 to your computer and use it in GitHub Desktop.
Save MatthieuLemoine/adf5d3097d1ec37e45a567307772a6e3 to your computer and use it in GitHub Desktop.
Find repository dependencies in all your projects
// 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)
// Print
.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